`

spring中如何得到bean(转)

 
阅读更多

方法一:在初始化时保存ApplicationContext对象

代码:
ApplicationContext ac = new FileSystemXmlApplicationContex("applicationContext.xml");
    ac.getBean("beanId");
   
说明:
   
这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。
 
方法二:通过Spring提供的工具类获取ApplicationContext对象
代码:
 import org.springframework.web.context.support.WebApplicationContextUtils;
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc)
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc)
    ac1.getBean("beanId");
    ac2.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()方法,可以方便的获取到ApplicationContextSpring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。

 

方法四:继承自抽象类WebApplicationObjectSupport
   
说明:
        
类似上面方法,调用getWebApplicationContext()获取WebApplicationContext
 
方法五:实现接口ApplicationContextAware
  
说明:
    
实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。Spring初始化时,会通过该方法将ApplicationContext 对象注入。
 
以上方法适合不同的情况,请根据具体情况选用相应的方法。
这里值得提一点的是,系统中用到上述方法的类实际上就于Spring框架紧密耦合在一起了,因为这些类是知道它们是运行在Spring框架上的,因此,系统中,应该尽量的减少这类应用,使系统尽可能的独立于当前运行环境,尽量通过DI的方式获取需要的服务提供者。

 

     然后在Action中编写如下代码得到Context,(我是覆盖了Struts ActionsetServlet方法,也许还有更好的方法)。

     public void setServlet(ActionServlet servlet){
         super.setServlet(servlet);
         ServletContext servletContext = servlet.getServletContext();
        WebApplicationContext wac =    WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
         // get yours beans

     }


我需要在springbean中直接获取,这下可和我们常规的操作有些不同,因为springbean都是pojo的。根本见不着servletconfigservletcontext的影子。

  这里我需要指出spring给我们提供了两个接口:org.springframework.web.context.ServletContextAware

org.springframework.web.context.ServletConfigAware。我们可以让我们的bean实现上边的任何一个接口就能获取到servletContext .

代码如下:

publicclass DicBean implements ServletContextAware{
    
private ServletContext servletContext;

publicvoid setServletContext(ServletContext sc){
    this.servletContext=sc;
    System.out.println("项目的绝对路径为:"+servletContext.getRealPath("/"));
}
}

分享到:
评论

相关推荐

    java中获得spring中的BEAN

    java中获得spring中的BEAN,

    Java中Spring获取bean方法小结

    Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,如何在程序中获取Spring配置的bean呢?下面通过本文给大家介绍Java中Spring获取bean方法小结,对spring获取bean方法相关知识感兴趣的朋友一起学习...

    获得spring里注册Bean的四种方法

    获得spring里注册Bean的四种方法 很详细的解释 适合新手

    Spring在应用中获得Bean的方法

    NULL 博文链接:https://bijian1013.iteye.com/blog/2355311

    Spring_ClassPathResource获得bean对象

    上传的资料都是非常经典的,这也是我学习过程中的心得,希望大家能给我指点,也希望大家多上传资料共同学习。千万不要传空文件夹。。。

    Spring实战之获得Bean本身的id操作示例

    主要介绍了Spring实战之获得Bean本身的id操作,结合实例形式分析了spring获取Bean本身id的相关配置与实现技巧,需要的朋友可以参考下

    Java获取Spring中配置的Bean的三种方式

    NULL 博文链接:https://xieke90.iteye.com/blog/2234803

    spring2.0技术手册

    《Spring 2.0技术手册》是学习Spring Web开发的最佳读物,它能让读者在示例学习中获得显著提高。《Spring 2.0技术手册》内容全面深入,主要包括Spring入门、Bean/消息/事件、Spring AOP、JDBC/事物支持、Spring与...

    Spring2.0技术手册

    本书是学习Spring Web开发的最佳读物,它能让读者在示例学习中获得显著提高。\r\n 本书内容全面深入,主要包括Spring入门、Bean/消息/事件、Spring AOP、JDBC/事物支持、Spring与Hibernate的整合、Spring Web MVC...

    Spring攻略(第二版 中文高清版).part1

    3.7 在你的Bean中引入行为 132 3.7.1 问题 132 3.7.2 解决方案 132 3.7.3 工作原理 132 3.8 为你的Bean引入状态 135 3.8.1 问题 135 3.8.2 解决方案 135 3.8.3 工作原理 135 3.9 用基于XML的配置...

    Spring入门案例-入门案例制作

    在程序中读取Spring 配置文件,通过Spring框架获得Bean,完成相应的操作 在上面是我们的开发流程,我们第一步一般都是导入所需jar包,但由于刚开始时根本不知道该在什么时候用到哪些jar包,所以这里事先不导入jar包...

    Spring攻略(第二版 中文高清版).part2

    3.7 在你的Bean中引入行为 132 3.7.1 问题 132 3.7.2 解决方案 132 3.7.3 工作原理 132 3.8 为你的Bean引入状态 135 3.8.1 问题 135 3.8.2 解决方案 135 3.8.3 工作原理 135 3.9 用基于XML的配置...

    spring源码解决

    //这里根据bean的名字,在IOC容器中得到bean实例,这个IOC容器就是一个大的抽象工厂。 Object getBean(String name) throws BeansException; //这里根据bean的名字和Class类型来得到bean实例,和上面的方法不同在于...

    spring+springmvc+mybatis的整合

    如果它们在SQL映射文件中定义过,则将它们动态定义为一个Spring Bean, 这样,我们在Service中就可以直接注入映射接口的bean 意思就是可以直接ref="dao类名",给你自动注册好了 2.7 写mybatis的配置文件,一个...

    Spring与iBATIS的集成

    Spring与iBATIS的集成 iBATIS似乎已...” <br>就象Developer's Notebook 系列中所有的书一样,你将由直接的且实用的方式获得信息,这些信息包含了完成你工作所需的细节。换言之:“一切来自实战,没有讲义。”

    Spring Security 中文教程.pdf

    1.4. 获得Spring Security 1.4.1. 项目模块 1.4.1.1. Core - spring-security-core.jar 1.4.1.2. Web - spring-security-web.jar 1.4.1.3. Config - spring-security-config.jar 1.4.1.4. LDAP - spring-...

    spring源代码解析

    从加载过程我们可以看到,首先从Servlet事件中得到ServletContext,然后可以读到配置好的在web.xml的中的各个属性值,然后ContextLoder实例化WebApplicationContext并完成其载入和初始化作为根上下文。当这个根上...

Global site tag (gtag.js) - Google Analytics