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

相关文章
相关标签/搜索