Spring獲取bean的一種高效率方式

   傳統方式-------------經過加載配置文件獲取beanhtml

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
IDao dao= (IDao)context.getBean("dao");



參考自:http://blog.sina.com.cn/s/blog_62f6307d0101dn3c.html,http://www.iteye.com/topic/616752java

1.先寫個工具類,實現ApplicationContextAware接口,而後他會把ApplicationContext對象傳給你,在setApplicationContext方法裏已經把ApplicationContext傳給你了,而後去完成初始化。spring

/**
 * 從Spring容器中取得對象
 *
 */
public class SpringContextUtil implements ApplicationContextAware,
        ServletContextAware {

    private static ApplicationContext applicationContext; // Spring上下文對象

    private static ServletContext servletContext;// 注入 系統上下文對象

    /**
     * 實現ApplicationContextAware接口的回調方法,設置上下文環境
     * 
     * @param applicationContext
     * @throws BeansException
     */
    public void setApplicationContext(ApplicationContext applicationContext) {
        SpringContextUtil.applicationContext = applicationContext;
    }

    /**
     * @return ApplicationContext
     */
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    /**
     * 獲取對象
     * 
     * @param name
     * @return Object 一個以所給名字註冊的bean的實例
     * @throws BeansException
     */
    public static Object getBean(String name) throws BeansException {
        return applicationContext.getBean(name);
    }

    /**
     * 功能 : 實現 ServletContextAware接口,由Spring自動注入 系統上下文對象
     * 
     **/
    public void setServletContext(ServletContext servletContext) {
        SpringContextUtil.servletContext = servletContext;
    }

    /**
     * @return ServletContext
     */
    public static ServletContext getServletContext() {
        return servletContext;
    }
}

2.applicationContext也須要注入不然報NullPointException在spring配置文件applicationContext.xml中配置以下:數據庫

<bean id="springContextUtil" class="com.aaa.util.SpringContextUtil" lazy-init="false"></bean>

3.java代碼app

private static IDao Idao;
Idao=(Idao)SpringContextUtil.getBean("dao");

4.注意:工具

解釋下第2條中配置爲啥要加 lazy-init="false"spa

在你的spring配置文件中通常會有default- default-lazy-init="true" 這句話。該屬性默認爲false狀態,這樣致使spring在啓動過程致使在啓動時候,會默認加載整個對象實例圖,從初始化ACTION配置、到service配置到dao配置、乃至到數據庫鏈接、事務等等。spring的啓動會很慢因此在開發時都會改成true,延遲加載,而後就是會報NullPointException。code

注入 加上 lazy-init="false" 能夠保證 當即加載。xml

相關文章
相關標籤/搜索