SpringBoot2-获取Spring 容器中的Bean

逃离我推掉我的手 2022-04-10 06:51 580阅读 0赞

Spring 会在项目启动时, 对项目进行扫描, 对使用了@service, @Component, @Repository 等注解的类,创建相应的实例bean, 然后将bean 添加到Spring的上下文中. 对于获取Spring容器中的bean, 通常有自动注入和主动获取两种方式. 自动注入是使用最广泛的一种方式, 但是对于有些特殊的应用场景,如工具类中使用bean, 那就需要使用第二种方式了.

1. 自动注入

使用自动注入需要注意以下三点:第一, 类需要使用@Service/@Component 修饰; 第二, 类中需要新增一非静态属性, 且次属性需要使用@Resource/@Autowired 来修饰.

  1. @Service
  2. public class UserService implements IUserService{
  3. @Resource
  4. private UserDao userDao;
  5. }

2. 主动获取

主动获取需要自定义实现ApplicationContextAware的工具类, 用户获取Spring的上下文对象. 通过Spring的上下文, 不仅可以获取Spring容器中的bean, 还可以获取应用的环境配置等信息.

2.1 Spring上下文工具类

  1. package org.zongf.learn.sboot.quartz.util;
  2. import org.springframework.beans.BeansException;
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.ApplicationContextAware;
  5. import org.springframework.stereotype.Component;
  6. /** * @Description: Spring 上下文工具, 可用于获取spring 容器中的Bean * @author: zongf * @date: 2018-12-26 10:34 */
  7. @Component
  8. public class SpringContextUtil implements ApplicationContextAware {
  9. private static ApplicationContext applicationContext;
  10. @Override
  11. public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  12. SpringContextUtil.applicationContext = applicationContext;
  13. }
  14. /** * @Description: 获取spring容器中的bean,通过bean名称获取 * @param beanName bean名称 * @return: Object 返回Object,需要做强制类型转换 * @author: zongf * @time: 2018-12-26 10:45:07 */
  15. public static Object getBean(String beanName){
  16. return applicationContext.getBean(beanName);
  17. }
  18. /** * @Description: 获取spring容器中的bean, 通过bean类型获取 * @param beanClass bean 类型 * @return: T 返回指定类型的bean实例 * @author: zongf * @time: 2018-12-26 10:46:31 */
  19. public static <T> T getBean(Class<T> beanClass) {
  20. return applicationContext.getBean(beanClass);
  21. }
  22. /** * @Description: 获取spring容器中的bean, 通过bean名称和bean类型精确获取 * @param beanName bean 名称 * @param beanClass bean 类型 * @return: T 返回指定类型的bean实例 * @author: zongf * @time: 2018-12-26 10:47:45 */
  23. public static <T> T getBean(String beanName, Class<T> beanClass){
  24. return applicationContext.getBean(beanName,beanClass);
  25. }
  26. }

2.2 使用方式

  1. public void method(){
  2. UserDao userDao = SpringContextUtil.getBean(UserDao.class);
  3. ...
  4. }

发表评论

表情:
评论列表 (有 0 条评论,580人围观)

还没有评论,来说两句吧...

相关阅读