最近做项目需要用到getBean(),在网上搜索之后发现有很多种方式获取ApplicationContext,做了些许尝试,解决了我的问题,决定把搜到的东西进行汇总,供大家学习。
方法一:FileSystemXmlApplicationContext
这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。
方法二:通过Spring提供的工具类WebApplicationContextUtils获取ApplicationContext对象
这种方式适合于采用Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象,然后在通过它获取需要的类实例。
方法五:继承自抽象类WebApplicationObjectSupport
这个类提供了方便的功能,这样你就不必去记 ServletContext 中属性的名字。 它的getWebApplicationContext() 方法在 WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE 这个键值不对应任何对象的时候将返回 null。不过,为了避免在应用中得到 NullPointerExceptions ,我们推荐你使用 getRequiredWebApplicationContext() 方法。这个方法在ApplicationContext 缺失的时候会抛出一个异常。
上面两个工具方式的区别是,前者在获取失败时抛出异常,后者返回null。
方法三:ClassPathXmlApplicationContext (不推荐使用,比较费内存)
方法四:继承自抽象类ApplicationObjectSupport
抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。
Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。
方法五:继承自抽象类WebApplicationObjectSupport
类似上面方法,调用getWebApplicationContext()获取WebApplicationContext
方法六:实现接口ApplicationContextAware
(推荐使用)
SpringContextsUtil 实现了接口ApplicationContextAware,setApplicationContext(ApplicationContext applicationContext)这个方法。Spring初始化的时候就将ApplicationContext 装配好了,那么项目中就可以直接使用applicationContext.getBean("beanId");