1. 程式人生 > >ApplicationContextAware獲取上下文bean

ApplicationContextAware獲取上下文bean

在專案中想獲取環境的bean,有很多方式。其中有根據request,還有本文寫的實現ApplicationContextAware介面獲取。

上程式碼

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();
    }
}
單單這樣是不行的,會出現context為null的問題,也就是說獲取不到的。

需要在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");