建立獲取Springbean物件工具類

如來神掌十八式發表於2020-09-25

需求: 建立一個工具類,可以根據beanId獲取spring的bean物件.

1.在web.xml配置監聽器

	<listener>
	    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<listener>
	    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
	</listener>
	<listener>
		<listener-class>
			com.demo.utils.SpringBeanGetter
		</listener-class>
	</listener>

2.建立監聽器實現類,實現ServletContextListener

public class SpringBeanGetter implements ServletContextListener
{

    public SpringBeanGetter()
    {
    }

    public void contextDestroyed(ServletContextEvent arg0)
    {
        setContext(null);
    }

    public void contextInitialized(ServletContextEvent arg0)
    {
        setContext(arg0.getServletContext());
    }

    private static final void setContext(ServletContext context)
    {
        context = context;
    }

    public static final Object getBean(String beanId)
    {
        WebApplicationContext application;
        for(application = WebApplicationContextUtils.getWebApplicationContext(context); application == null && errorCount < 5;)
            try
            {
                Thread.currentThread();
                Thread.sleep(3000L);
                application = WebApplicationContextUtils.getWebApplicationContext(context);
                logger.error(" \u672A\u627E\u5230applicationContext \u5BF9\u8C61");
                errorCount++;
            }
            catch(InterruptedException e)
            {
                e.printStackTrace();
            }

        if(null != application)
            return application.getBean(beanId);
        else
            return null;
    }

    private static ServletContext context = null;
    private static final Logger logger = Logger.getLogger(com/huawei/ecommerce/common/base/utils/SpringBeanGetter);
    private static int errorCount = 0;

}

 

相關文章