在服務器啟動時servlet中獲取spring 的bean對象


這是定義的listener

    
public class SpringLoaderListener  implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent event) {
        
        ServletContext t1 = event.getServletContext();
        WebApplicationContext t2 = WebApplicationContextUtils.getWebApplicationContext(t1);
        SpringContextUtil.setApplicationContextStaticlly(t2);
    }
 
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
         
    }
}




    
package com.woods.common.util;
 
 
import org.springframework.beans.BeansException;   
import org.springframework.context.ApplicationContext;   
import org.springframework.context.ApplicationContextAware;   
import org.springframework.web.context.WebApplicationContext;
 
public class SpringContextUtil implements ApplicationContextAware {  
   
    // Spring應用上下文環境  
    private static WebApplicationContext applicationContext;  
   
    public static void setApplicationContextStaticlly(WebApplicationContext vApplicationContext)    
    {  
        SpringContextUtil.applicationContext = vApplicationContext;  
    }  
   
     
 
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) {  
        SpringContextUtil.applicationContext = (WebApplicationContext) applicationContext;  
    }  
   
 
    public static ApplicationContext getApplicationContext() {  
        return applicationContext;  
    }  
   
    /**
     * 獲取對象
     */  
    public static Object getBean(String name) throws BeansException {  
        return applicationContext.getBean(name);  
    }  
   
}


web.xml

    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            WEB-INF/applicationContext.xml,
            WEB-INF/applicationContext-dbcp.xml
        </param-value>
    </context-param>
     
    <!--
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListenerSSS</listener-class>
    </listener>
 
    <listener>
       <listener-class>com.woods.common.util.SpringLoaderListener</listener-class>
    </listener>


servlet中這樣取bean

    
    public void init(){  
        String str = null;  
        if (str == null && profileScheThread == null) {  
        
            profileScheThread = (ProfileScheThread) SpringContextUtil.getBean("profileScheThread");  
        //
        這里注意
        當使用<context:include-filter type="regex" expression=".*Impl" />的方式,生成bean的時候,默認的
        bean 名字是首字母小寫的類名,例:UserDao 就是userDao ,當然也可以用類名.class來獲取bean,另外如果有接口
        的話,注意前面類型強轉的時候是也接口名而不是類名!
    
            //profileScheThread.start(); // servlet 上下文初始化時啟動 socket
            int a = 0;
        }  
    }  


"profileScheThread"是用@Component定義的bean,這個bean在spring mvc的其它功能中,正常裝配。



    
@Component("profileScheThread")
public class ProfileScheThread {
    @Autowired
    @Qualifier("productProfileManager")
    ProductProfileManager productProfileManager;
    @Autowired
    @Qualifier("itemInManager")
    ItemInManager itemInManager;
     
    /*****************************************************************
     * 方法部分
     *****************************************************************/
 
    public void run() {  
             ...
        }
 
    }

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com