springboot实现在⼯具类(util)中调⽤注⼊service层⽅法⼀、新建BeanUtil类
slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.DisposableBean;
import t.ApplicationContext;
import t.ApplicationContextAware;
import java.util.ArrayList;
import java.util.List;
@Slf4j
public class BeanUtil implements ApplicationContextAware, DisposableBean {
private static ApplicationContext applicationContext = null;
/
**
* 从静态变量applicationContext中取得Bean, ⾃动转型为所赋值对象的类型.
*/
public static <T> T getBean(Class<T> requiredType) {
if(applicationContext==null){
throw new IllegalStateException("applicaitonContext属性未注⼊, 请在SpringBoot启动类中注册BeanUtil.");
}
Bean(requiredType);
}
@Override
public void destroy() {
applicationContext = null;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (BeanUtil.applicationContext != null) {
log.warn("BeanUtil中的ApplicationContext被覆盖, 原有ApplicationContext为:" + BeanUtil.applicationContext);
}
BeanUtil.applicationContext = applicationContext;
}
}
⼆、在启动类中注⼊BeanUtil
@SpringBootApplication
public class StartApplication {
public static void main(String[] args) {
SpringApplication.run(StartApplication.class, args);
}
@Bean
public BeanUtil beanUtil() {
return new BeanUtil();
}
}
三、在Util类中获取Service
public class MyUtils {
public static UserDetails getCurrentUser() {
MyUserDetailsService userDetailsService = Bean(MyUserDetailsService.class);
//TODO 调⽤service中的⽅法处理⾃⼰的业务
return null;
}
}
springBoot中普通类直接调⽤spring管理的dao.service等bean
在项⽬中经常会⽤到⼀些不是controller和service层的去访问dao层,或者是普通类访问service层。
前提:
⾸先确保dao,serivce全部可以在项⽬启动的时候扫描到
编写⼀个⼯具类,通过⼯具类去获取ApplicationContext对象,然后通过applicationContext对象去加载spring管理的bean
将该⼯具类在项⽬启动类进⾏引⼊,否则会报空指针异常。
具体使⽤⽅法如下:
1)编写⼯具
package com.bonc.springboot.utils;
/*
* @desc:提供⾮SPRING管理类调⽤管理类的功能
* 注意在服务启动的时候进⾏import,apllication中引⼊
*/
import org.springframework.beans.BeansException;
import t.ApplicationContext;
import t.ApplicationContextAware;
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;
注入
}
System.out.println("---------------------------------------------------------------------");
System.out.println("========ApplicationContext配置成功,在普通类可以通过调⽤AppContext()获取applicationContext对象,applicationContext="+SpringUtil.applicationContext+"========");              System.out.println("--------
-------------------------------------------------------------");
}
//获取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);
}
}
2)将该⼯具类,在服务启动类application 中导⼊
3)普通类中使⽤APPlicationContent对象获取对应的bean进⾏使⽤:
ApplicationContext appCtx = ApplicationContext();
public  TestDao dao = Bean(TestDao.class);
也可写成
public  TestDao dao = Bean(TestDao.class);
具体测试如下:
例:⽐如有⼀个请求中调⽤了实体类,实体类的构造⽅法调⽤的dao,进⾏的数据库的访问
请求:
//普通类进⾏构造的时候,可以调⽤dao 对象
@RequestMapping(value="/testClassQuery")
public  void  testClassQuery(){
TestClassQuery testClassQuery =new TestClassQuery();
}
普通类代码:
**
* @Description: 测试普通类如何调⽤mapper
*/
public  class TestClassQuery {
ApplicationContext appCtx = ApplicationContext();
public  TestDao dao = Bean(TestDao.class);
private  User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public  TestClassQuery(){
testQuery();
}
public  void testQuery(){
user = dao.queryUser("1"); //通过id获取值
System.out.String());
}
}
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。