获取Spring容器Bean对象工具类详解编程语言

        在开发中,总是能碰到用注解注入不了Spring容器里面bean对象的问题。为了解决这个问题,我们需要一个工具类来直接获取Spring容器中的bean。因此就写了这个工具类,在此记录一下,方便后续查阅。废话不多说,直接上代码。

一、代码

package com.zxy.demo.spring; 
 
import org.springframework.beans.BeansException; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.ApplicationContextAware; 
import org.springframework.stereotype.Component; 
 
/** 
 * 获取Spring容器中bean工具类 
 * @author ZENG.XIAO.YAN 
 * @date   2018年6月6日 
 *  
 */ 
@Component("springContextUtils") 
public class SpringContextUtils implements ApplicationContextAware { 
 
	private static ApplicationContext applicationContext = null; 
 
	public static ApplicationContext getApplicationContext() { 
		return applicationContext; 
	} 
 
	@SuppressWarnings("unchecked") 
	public static <T> T getBean(String beanId) { 
		return (T) applicationContext.getBean(beanId); 
	} 
 
	public static <T> T getBean(Class<T> requiredType) { 
		return (T) applicationContext.getBean(requiredType); 
	} 
 
	/** 
	 * Spring容器启动后,会把 applicationContext 给自动注入进来,然后我们把 applicationContext 赋值到静态变量中,方便后续拿到容器对象 
	 * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext) 
	 */ 
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 
		SpringContextUtils.applicationContext = applicationContext; 
	} 
 
}
x
1

package com.zxy.demo.spring;

2

3

import org.springframework.beans.BeansException;

4

import org.springframework.context.ApplicationContext;

5

import org.springframework.context.ApplicationContextAware;

6

import org.springframework.stereotype.Component;

7

8

/**

9

 * 获取Spring容器中bean工具类

10

 * @author ZENG.XIAO.YAN

11

 * @date   2018年6月6日

12

 * 

13

 */

14

@Component("springContextUtils")

15

public class SpringContextUtils implements ApplicationContextAware {

16

17

    private static ApplicationContext applicationContext = null;

18

19

    public static ApplicationContext getApplicationContext() {

20

        return applicationContext;

21

    }

22

23

    @SuppressWarnings("unchecked")

24

    public static <T> T getBean(String beanId) {

25

        return (T) applicationContext.getBean(beanId);

26

    }

27

28

    public static <T> T getBean(Class<T> requiredType) {

29

        return (T) applicationContext.getBean(requiredType);

30

    }

31

32

    /**

33

     * Spring容器启动后,会把 applicationContext 给自动注入进来,然后我们把 applicationContext 赋值到静态变量中,方便后续拿到容器对象

34

     * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)

35

     */

36

    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

37

        SpringContextUtils.applicationContext = applicationContext;

38

    }

39

40

}

二、用法

        直接在代码用调用
SpringContextUtils
静态方法获取bean就ok,可以通过bean的id获取,也可以通过bean的类型获取
RedisUtil redisUtil = SpringContextUtils.getBean(RedisUtil.class);
 

1

RedisUtil redisUtil = SpringContextUtils.getBean(RedisUtil.class);

三、注意事项

        仔细看代码可以发现我这个工具类上面加了个
@Component
注解。加这个注解的目的是为了把的
SpringContextUtils
的实例化交给Spring容器管理。当然,你也可以在xml中配置这个,我为了方便,直接用的注解。注意点:这个工具类的实例化必须由Spring容器来做

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/15535.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论