如何在手動獲取spring中的bean(Spring ApplicationContextAware獲取上下文)
阿新 • • 發佈:2018-05-14
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) throwsBeansException { 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獲取上下文)