2019独角兽企业重金招聘Python工程师标准>>>
传统方式-------------通过加载配置文件获取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中配置如下:
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" 可以保证 立即加载。