SpringBoot中的main方法注入service
作者:家里有个妖精 发布时间:2021-10-31 15:33:33
标签:SpringBoot,main,service
一、SpringBoot中的main方法注入service
在springboot中使用main方法常规无法注入service,因为以后也可能会有这种情况,所以采取工具类的方式进行,该工具类为固定写法,直接复制就行
@Component
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext = null;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (SpringContextUtil.applicationContext == null) {
SpringContextUtil.applicationContext = applicationContext;
}
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
public static <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
}
然后在需要注入的地方,创建静态service
private static Service service;
然后在需要使用的main方法中:
public static void main(String[] args) {
SpringApplication.run(**Application.class,args);
ApplicationContext applicationContext = SpringContextUtil.getApplicationContext();
service = applicationContext.getBean(**Service.class);
}
二、springboot 通过main方法调用service或dao
大多数情况下,我们使用springboot是创建一个web项目,然后通过接口访问,但是也有特殊情况,比如线上跑着的web项目,有一些特殊的数据,需要经过计算导入到数据库,这个时候,我们可能需要原来的web项目中的一些service,dao才辅助操作,但是又不能在服务端新开接口。
我们通过springboot的main方法执行这些操作。
此时,service和到需要通过上下文获得。
创建类,并复制下面代码
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* 普通类调用Spring bean对象:
* 注意:此类需要放到App.java同包或者子包下才能被扫描,否则失效。
*/
@Component
public class SpringUtil implements ApplicationContextAware{
private static ApplicationContext applicationContext = null;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if(SpringUtil.applicationContext == null){
SpringUtil.applicationContext = applicationContext;
}
}
//获取applicationContext
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
//通过name获取 Bean.
public static Object getBean(String name){
return getApplicationContext().getBean(name);
}
//通过class获取Bean.
public static <T> T getBean(Class<T> clazz){
return getApplicationContext().getBean(clazz);
}
//通过name,以及Clazz返回指定的Bean
public static <T> T getBean(String name,Class<T> clazz){
return getApplicationContext().getBean(name, clazz);
}
}
再创建TestApp方法,必须跟SpringUtilfa放到同一目录下
package com.example.demo.test2;
import com.example.demo.controller.Aqjg_thePeriodController;
import com.example.demo.mapper.AppAqjgTaskMapper;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import java.util.List;
import java.util.Map;
@SpringBootApplication
@MapperScan(basePackages = {"com.example.demo.mapper"})
public class TestApp {
public static void main(String[] args) {
SpringApplication.run(TestApp.class, args);
ApplicationContext context = SpringUtil.getApplicationContext();
Aqjg_thePeriodController aqjg_thePeriodController = new Aqjg_thePeriodController();
AppAqjgTaskMapper appAqjgTaskMapper = context.getBean(AppAqjgTaskMapper.class); //你的dao或service
List<Map<String,Object>> list = appAqjgTaskMapper.getTestSmsData();
System.out.println("完成");
}
}
来源:https://blog.csdn.net/llzmlt/article/details/103043322


猜你喜欢
- 一、什么是Spring Cloud?SpringCloud 对常见的分布式系统模式提供了简单易用的编程模型,帮助开发者构建弹性、可靠、协调的
- 首先我们看一下hibernate的主配置文件<!DOCTYPE hibernate-configuration PUBLIC &nbs
- 1、什么是hashCodehashCode就是对象的散列码,是根据对象的某些信息推导出的一个整数值,默认情况下表示是对象的存储地址。通过散列
- 前言在Android中经常要使用Dialog来实现一些提示以及一些特殊的效果,而且样式也不一样,每次都得查一大堆资料,还不一定能解决。对话框
- 在c和c++中,我们知道没办法起一个变量名叫int,因为这是C/C++保留的关键字,起这么一个变量名没办法区分到底是int类型还是int变量
- 一、idea打包项目第一步点击右边maven第二步点击compile,编译代码,编译成功后(双击运行)第三步点击package,打包代码二、
- 什么是注解?对于很多初次接触的开发者来说应该都有这个疑问?Annontation是Java5开始引入的新特征,中文名称叫注解。它提供了一种安
- 异常方法//返回此可抛出对象的详细信息消息字符串public String getMessage() //将此可抛发对象及其回溯到标准错误流
- 本文实例为大家分享了Android自定义顶部标题栏展示的具体代码,供大家参考,具体内容如下思路及实现步骤1.定义标题栏布局2.自定义Titl
- 一、前言让我们先理一下springfox与swagger的关系。swagger是一个流行的API开发框架,这个框架以“开放API声明”(Op
- 在很多时候我们在生成C#exe文件时,如果在工程里调用了dll文件时,那么如果不加以处理的话在生成的exe文件运行时需要连同这个dll一起转
- 实践过程效果代码public partial class Form1 : Form {
- 1.委托delegate委托delegate也是一种类型,在任何可以声明类的地方都可以声明委托,它将方法当做另一个方法的参数进行传递,这样就
- 1.查找数据库中表的列名<pre name="code" class="html">St
- 前言 因为自己在做的一个小软件里面需要用到从A-Z排序的ListView,所以自然而然的想到了微信的联系人,我想要的就是那样的效果。本来没
- 1. 引入当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象, 只有通过new关键字才会产生出对象,这时系统才会
- 具体不做详细介绍了,直接上代码/// <summary> /// 功能:FileStream文件流读取文件 &nbs
- 在学习java中的collection时注意到,collection层次的根接口Collection实现了Iterable<T>
- java多线程-同步块Java 同步块(synchronized block)用来标记方法或者代码块是同步的。Java 同步块用来避免竞争。
- 1.修改系统默认的Dialog样式(风格、主题)2.自定义Dialog布局文件3.可以自己封装一个类,继承自Dialog或者直接使用Dial