大数据的具体获取方法和途径 Spring获取Bean的几种方式
Spring获取Bean的几种方式
方法一 在初始化时保存ApplicationContext对象
代码 ApplicationContext ac = new FileSystemXmlApplicationContex( applicationContext xml ); ac getBean( beanId ); 说明 这种方式适用于采用Spring框架的独立应用程序 需要程序通过配置文件手工初始化Spring的情况 方法二 通过Spring提供的工具类获取ApplicationContext对象代码 import sprntext support WebApplicationContextUtils;ApplicationContext ac = WebApplicationContextUtils getRequiredWebApplicationContext(ServletContext sc)ApplicationContext ac = WebApplicationContextUtils getWebApplicationContext(ServletContext sc) ac getBean( beanId ); ac getBean( beanId ); 说明 这种方式适合于采用Spring框架的B/S系统 通过ServletContext对象获取ApplicationContext对象 然后在通过它获取需要的类实例 上面两个工具方式的区别是 前者在获取失败时抛出异常 后者返回null
其中 servletContext sc 可以具体 换成 servlet getServletContext()或者 this getServletContext() 或者 request getSession() getServletContext();
另外 由于spring是注入的对象放在ServletContext中的 所以可以直接在ServletContext取出WebApplicationContext 对象
WebApplicationContext webApplicationContext = (WebApplicationContext) servletContext getAttribute(WebApplicationContext ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); 方法三 继承自抽象类ApplicationObjectSupport 说明 抽象类ApplicationObjectSupport提供getApplicationContext()方法 可以方便的获取到ApplicationContext Spring初始化时 会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入
方法四 继承自抽象类WebApplicationObjectSupport 说明 类似上面方法 调用getWebApplicationContext()获取WebApplicationContext 方法五 实现接口ApplicationContextAware 说明 实现该接口的setApplicationContext(ApplicationContext context)方法 并保存ApplicationContext 对象 Spring初始化时 会通过该方法将ApplicationContext 对象注入 以上方法适合不同的情况 请根据具体情况选用相应的方法 这里值得提一点的是 系统中用到上述方法的类实际上就于Spring框架紧密耦合在一起了 因为这些类是知道它们是运行在Spring框架上的 因此 系统中 应该尽量的减少这类应用 使系统尽可能的独立于当前运行环境 尽量通过DI的方式获取需要的服务提供者
然后在Action中编写如下代码得到Context (我是覆蓋了Struts Action的setServlet方法 也许还有更好的方法)
public void setServlet(ActionServlet servlet){ super setServlet(servlet); ServletContext servletContext = servlet getServletContext(); WebApplicationContext wac = WebApplicationContextUtils getRequiredWebApplicationContext(servletContext); // get yours beans
}我需要在spring的bean中直接获取 这下可和我们常规的操作有些不同 因为spring的bean都是pojo的 根本见不著servletconfig和servletcontext的影子
这里我需要指出spring给我们提供了两个接口 sprntext ServletContextAware和

sprntext ServletConfigAware 我们可以让我们的bean实现上边的任何一个接口就能获取到servletContext了
代码如下
public class DicBean implements ServletContextAware{ private ServletContext servletContext;public void setServletContext(ServletContext sc) { this servletContext=sc; System out println( 项目的绝对路径为 +servletContext getRealPath( / ));}}
lishixinzhi/Article/program/Java/ky/201311/28433