方法一:
public final class Assembler implements BeanFactoryPostProcessor { private static ConfigurableListableBeanFactory beanFactory; // Spring應用上下文環境
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { Assembler.beanFactory = beanFactory; initMerchant(); }
實現該接口,可以在spring的bean創建之前,修改bean的定義屬性。
也就是說,Spring允許BeanFactoryPostProcessor在容器實例化任何其它bean之前讀取配置元數據,並可以根據需要進行修改
手動注冊bean:
private static ConfigurableListableBeanFactory beanFactory; // Spring應用上下文環境 DefaultListableBeanFactory beanFactory2 = (DefaultListableBeanFactory) beanFactory; BeanDefinitionBuilder beanMer = BeanDefinitionBuilder.genericBeanDefinition(className); beanMer.setParentName(beanType); beanMer.addPropertyValue("mrchCode", corgNum); beanMer.addPropertyValue("connectionName", beanName); beanMer.setInitMethodName("init"); beanMer.setInitMethodName("isMerchantOpen"); beanName = beanType + "_" + corgNum; beanFactory2.registerBeanDefinition(beanName, beanMer.getRawBeanDefinition());
方法二:
public class InitConfig extends HttpServlet implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent arg0) { logger.info("銷毀。。。。"); timer.cancel(); } @Override public void contextInitialized(ServletContextEvent arg0) { logger.info("初始化。。。。"); //手動讓spring容器管理此類 SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); } <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>jsfirst.weixin.InitConfig</listener-class>
</listener>