根据Bean id 获取IOC容器中的对象

2019-09-14  本文已影响0人  大黑跟小白的日常

1、实现ApplicationContextAware接口;

2、@Component注解标注,实现属性加载赋值;

@Component
public class SpringContextUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext;
    /**
     * 实现ApplicationContextAware接口的回调方法,设置上下文环境
     */
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) {
        SpringContextUtil.applicationContext = applicationContext;
    }
    /**
     * 获得spring上下文
     *
     * @return ApplicationContext spring上下文
     */
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }
    /**
     * 获取bean
     *
     * @param name service注解方式name为小驼峰格式
     * @return Object bean的实例对象
     */
    public static Object getBean(String name) throws BeansException {
        return applicationContext.getBean(name);
    }
}

3、测试使用

@SpringBootTest
@RunWith(SpringRunner.class)
public class ApplicationContextTest {
    @Test
    public void test() {
        Object redisTemplate = SpringContextUtil.getBean("redisTemplate");
        System.out.println(redisTemplate);
    }

也可以直接从IOC中获取ApplicationContext对象使用;

@SpringBootTest
@RunWith(SpringRunner.class)
public class ApplicationContextTest {
    @Autowired
    private ApplicationContext context;
    @Test
    public void testApplicationContex() {
        Object redisTemplate = context.getBean("redisTemplate");
        System.out.println(redisTemplate);
    }
上一篇 下一篇

猜你喜欢

热点阅读