Spring获取bean的一种高效率方式

   传统方式-------------通过加载配置文件获取bean

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/616752

1.先写个工具类,实现ApplicationContextAware接口,然后他会把ApplicationContext对象传给你,在setApplicationContext方法里已经把ApplicationContext传给你了,然后去完成初始化。

/**
 * 从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代码

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

4.注意:

解释下第2条中配置为啥要加 lazy-init="false"

在你的spring配置文件中一般会有default- default-lazy-init="true" 这句话。该属性默认为false状态,这样导致spring在启动过程导致在启动时候,会默认加载整个对象实例图,从初始化ACTION配置、到service配置到dao配置、乃至到数据库连接、事务等等。spring的启动会很慢所以在开发时都会改为true,延迟加载,然后就是会报NullPointException。

注入 加上 lazy-init="false" 可以保证 立即加载。





你可能感兴趣的:(Spring获取bean的一种高效率方式)