SpringBoot2-获取Spring 容器中的Bean
Spring 会在项目启动时, 对项目进行扫描, 对使用了@service, @Component, @Repository 等注解的类,创建相应的实例bean, 然后将bean 添加到Spring的上下文中. 对于获取Spring容器中的bean, 通常有自动注入和主动获取两种方式. 自动注入是使用最广泛的一种方式, 但是对于有些特殊的应用场景,如工具类中使用bean, 那就需要使用第二种方式了.
1. 自动注入
使用自动注入需要注意以下三点:第一, 类需要使用@Service/@Component 修饰; 第二, 类中需要新增一非静态属性, 且次属性需要使用@Resource/@Autowired 来修饰.
@Service
public class UserService implements IUserService{
@Resource
private UserDao userDao;
}
2. 主动获取
主动获取需要自定义实现ApplicationContextAware的工具类, 用户获取Spring的上下文对象. 通过Spring的上下文, 不仅可以获取Spring容器中的bean, 还可以获取应用的环境配置等信息.
2.1 Spring上下文工具类
package org.zongf.learn.sboot.quartz.util;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/** * @Description: Spring 上下文工具, 可用于获取spring 容器中的Bean * @author: zongf * @date: 2018-12-26 10:34 */
@Component
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil.applicationContext = applicationContext;
}
/** * @Description: 获取spring容器中的bean,通过bean名称获取 * @param beanName bean名称 * @return: Object 返回Object,需要做强制类型转换 * @author: zongf * @time: 2018-12-26 10:45:07 */
public static Object getBean(String beanName){
return applicationContext.getBean(beanName);
}
/** * @Description: 获取spring容器中的bean, 通过bean类型获取 * @param beanClass bean 类型 * @return: T 返回指定类型的bean实例 * @author: zongf * @time: 2018-12-26 10:46:31 */
public static <T> T getBean(Class<T> beanClass) {
return applicationContext.getBean(beanClass);
}
/** * @Description: 获取spring容器中的bean, 通过bean名称和bean类型精确获取 * @param beanName bean 名称 * @param beanClass bean 类型 * @return: T 返回指定类型的bean实例 * @author: zongf * @time: 2018-12-26 10:47:45 */
public static <T> T getBean(String beanName, Class<T> beanClass){
return applicationContext.getBean(beanName,beanClass);
}
}
2.2 使用方式
public void method(){
UserDao userDao = SpringContextUtil.getBean(UserDao.class);
...
}
还没有评论,来说两句吧...