您现在的位置是:首页 >

大数据的具体获取方法和途径 Spring获取Bean的几种方式

火烧 2021-10-07 06:40:49 1052
S ri g获取Bea 的几种方式   方法一 在初始化时保存A licatio Co text对象   代码 A licatio Co text ac = ew FileSy temXmlA lic

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和

大数据的具体获取方法和途径 Spring获取Bean的几种方式

   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  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码