ApplicationContextAware獲取上下文bean
阿新 • • 發佈:2019-02-19
在專案中想獲取環境的bean,有很多方式。其中有根據request,還有本文寫的實現ApplicationContextAware介面獲取。
上程式碼
單單這樣是不行的,會出現context為null的問題,也就是說獲取不到的。public class SpringApplicationContextHolder implements ApplicationContextAware{ private static ApplicationContext context; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.context = applicationContext; } public static Object getSpringBean(String beanName) { return context==null?null:context.getBean(beanName); } public static String[] getBeanDefinitionNames() { return context.getBeanDefinitionNames(); } }
需要在Spring的bean容器中註冊才可以使用。
<bean class="com.ecfund.base.util.common.SpringApplicationContextHolder" lazy-init ="false"/>
讓這個bean優先於其他bean載入才能成功。這就是lazy-init='false'的原因。
ThreadPoolTaskExecutor excutor = (ThreadPoolTaskExecutor) SpringApplicationContextHolder.getSpringBean("taskExecutor");
annotation的註解name是類名的首字母小寫。
private TcategoryDAO tcategoryDAO;
tcategoryDAO = (TcategoryDAO) SpringApplicationContextHolder.getSpringBean("tcategoryDAO");