Springboot如何通过自定义工具类获取bean

网友投稿 236 2022-12-05

Springboot如何通过自定义工具类获取bean

目录Springboot 自定义工具类获取bean在工具类注入bean的三种方式1. 需求/目的2.使用环境3.方法一:获取ApplicationContext上下文4.方法二:将工具类的对象也添加为bean5.方法三:在spring Boot 启动时创建工具类自身的静态对象

Springboot 自定义工具类获取bean

/**

* Created with IntelliJ IDEA.

*

* @Auther: zp

* @Date: 2021/03/26/13:32

* @Description: 通过beanFactory获取spring管理的bean对象工具类

*/

@Component

public class ApplicationContextUtil implements ApplicationContextAware {

private static ApplicationContext context;

// springboot加载完成后会把beanfactory作为参数传给次方法,然后我们可以把工厂赋值给context。

@Override

public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

context = applicationContext;

}

// 通过context获取bean

public static Object getBean(String beanName) {

return context.geCQOkktBean(beanName);

}

}

在工具类注入bean的三种方式

1. 需求/目的

比如:在进行使用HandlerInterceptorAdapter拦截器时,需要访问数据库来判断是否拦截请求,这时就需要在拦截器的判断类中注入Dao或Service对象来执行sql语句。而直接使用@Autowired无法进行注入。

2.使用环境

spring boot 2.0.3

3.方法一:获取ApplicationContext上下文

在applicationContext对象中可以获取到所有的bean

第一步:准备ApplicationContextAware的实现类,用于获取applicationContext对象

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.springframework.context.ApplicationContext;

import org.springframework.context.ApplicationContextAware;

import org.springframework.stereotype.Componenhttp://t;

import com.authstr.ff.utils.exception.Assert;

@Component

public class SpringUtils implements ApplicationContextAware {

private static Log log = LogFactory.getLog(SpringUtils.class);

private static ApplicationContext applicationContext;

public void setApplicationContext(ApplicationContext applicationContext) {

SpringUtils.applicationContext = applicationContext;

}

private static ApplicationContext getContext() {

return applicationContext;

}

public static Object getBean(String beanId) {

return SpringUtils.getBean(Object.class, beanId);

}

public static T getBean(Class clazz, String beanId) throws ClassCastException {

ApplicationContext context = SpringUtils.getContext();

Assert.isTrue(StringUtils.hasText(beanId), "beanId must not null!",true);

boolean a=context.containsBean(beanId);

Assert.isTrue(context.containsBean(beanId), "beanId :[" + beanId + "] is not exist!",true);

Object bean = null;

bean = context.getBean(beanId);

return (T)bean;

}

}

这是已经写好的工具类,可以根据bean的id获取对应的bean

第二步: 对要获取的bean设置id

如:

@Component("basicDaoImpl")

public class BasicDaoImpl extends AbstractDao implements BasicDao

第三步: 在要使用的类中写一个方便调用的方法

public BasicDaoImpl getBasicDaoImpl (){

return SpringUtils.getBean(BasicDaoImpl .class, "basicDaoImpl");

}

4.方法二:将工具类的对象也添加为bean

第一步:当前类添加@Component注解

第二步:对要获取的对象使用@Autowired 注解

@Autowired

private BasicDaoImpl basicDaoImpl;

第三步:在创建该工具类的地方,这样定义

@Bean

public AuthInterceptor authInterceptor(){

return new AuthInterceptor();

}

5.方法三:在spring Boot 启动时创建工具类自身的静态对象

在本质上,同方法二

第一步:当前类添加@Component注解

第二步:在工具类创建一个自身的静态对象

public static AuthInterceptor authInterceptor;

第三步:使用@PostConstruct注解,在springboot加载时执行该方法

@PostConstruct

public void init() {

authInterceptor= this;

AuthInterceptor .authInterceptor= this.authInterceptor;

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Redis使用RedisTemplate模板类的常用操作方式
下一篇:SpringCloud之@FeignClient()注解的使用方式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~