1. 程式人生 > >如何在手動獲取spring中的bean(Spring ApplicationContextAware獲取上下文)

如何在手動獲取spring中的bean(Spring ApplicationContextAware獲取上下文)

conf string str over 映射 div pre bean對象 nco

一、目的

寫了一個項目,多個module,然後想在A模塊中實現固定的config註入,當B模塊引用A時候,能夠直接填寫相對應的配置信息就行了。但是遇到一個問題,B引用A時候,A的配置信息總是填充不了,獲取不到在B中配置好的信息。猜測原因:因為項目的的bean文件沒有被統一管理。

二、ApplicationContextAware 接口

Spring 提供了ApplicationContextAware類,通過它可以獲取所有bean上下文。

也就是說,當一個類實現了這個接口之後,這個類就可以方便地獲得 ApplicationContext 中的所有bean。

換句話說,就是這個類可以直接獲取Spring配置文件中,所有有引用到的bean對象。

三、接口引用

1.工具類SpringContextUtil實現ApplicationContextAware方法,實現 setApplicationContext方法即可

public class SpringContextUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext; // Spring應用上下文環境

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws
BeansException { SpringContextUtil.applicationContext = applicationContext; } /** * 獲取對象 * * @param name * @return Object 一個以所給名字註冊的bean的實例 * @throws BeansException */ public static Object getBean(String name) throws BeansException { return applicationContext.getBean(name); } }

2.業務調用

 public String getConfig() throws IOException {
     MyConfig myConfig = (MyConfig)SpringContextUtil.getContext().getBean("myConfig");
     System.out.println("my config is"+myConfig.toString());
     return myConfig.toString();
 }

3.MyConfig

只是一個正常properties的配置映射。

如何在手動獲取spring中的bean(Spring ApplicationContextAware獲取上下文)