方法一:在初始化时保存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()方法,可以方便的获取到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给 我们提供了两个接口:org.springframework.web.context.ServletContextAware和

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

代码如下:

public class DicBean implements ServletContextAware{
    
private ServletContext servletContext;

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

Java普通类获取Spring框架Bean 的五种方法相关推荐

  1. java spring获取bean_普通Java类获取Spring的Bean的方法

    普通Java类获取Spring的Bean的方法 在SSH集成的前提下.某些情况我们需要在Action以外的类中来获得Spring所管理的Service对象. 之前我在网上找了好几好久都没有找到合适的方 ...

  2. JAVA 通过value获取Map中key的三种方法

    JAVA 通过value获取Map中key的三种方法 简介 方法描述 循环法 Stream方法 Apache Commons Collections的BidiMap 总结 简介 我们都知道Map是存放 ...

  3. Spring装配bean的三种方法:自动化装配,java代码装配,XML装配及它们的混合使用

    一.自动化装配 首先,把可能被装配的类声明为组件类,告知spring要为这个类创建bean如: import org.springframework.stereotype.Component;@ Co ...

  4. springBoot将Service实现类交给spring容器管理的两种方法

    方法一: 在类名上面添加@Service注解 方法二: 添加配置文件,配置文件里添加添加方法如下的方法,并加@Bean注解 springBoot将(Service实现)类交给spring容器管理的目的 ...

  5. 驱动中获取PsActiveProcessHead变量地址的五种方法

    PsActiveProcessHead的定义: 在windows系统中,所有的活动进程都是连在一起的,构成一个双链表,表头是全局变量PsActiveProcessHead,当一个进程被创建时,其Act ...

  6. 普通Java类获取Spring的bean

    在SSH集成的前提下.某些情况我们需要在Action以外的类中来获得Spring所管理的Service对象. 之前我在网上找了好几好久都没有找到合适的方法.例如: ApplicationContext ...

  7. Spring框架bean的注解管理方法之一 使用注解生成对象

    首先在原有的jar包: 需Spring压缩包中的四个核心JAR包 beans .context.core 和expression 下载地址: https://pan.baidu.com/s/1qXLH ...

  8. spring 实例化bean的几种方法

    1.普通的通过构造函数初始化,没有指定构造函数参数的就是用默认的无参的构造方法 <bean id="exampleBean" class="examples.Exa ...

  9. Java中判断字符串是否为数字的五种方法

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 推荐使用第二个方法,速度最快. 方法一:用JAVA自带的函数 Java代码   public sta ...

最新文章

  1. php 485串口通信,485串口通信中的常见问题
  2. 用于时序动作提名生成任务,爱奇艺提出BC-GNN图神经网络 | ECCV 2020
  3. 了解一下:机器学习性能优化的6个指标
  4. Spring-Boot + AOP实现多数据源动态切换
  5. html5下拉列表多行显示不出来,为什么我这个代码的效果显示不出来?我要显示的是鼠标经过选项出现下拉菜单栏!求大神提点!!!...
  6. 8种提升ASP.NET Web API性能的方法
  7. 一个Https网站发送Http的 ajax请求的解决方法
  8. USB2.0 描述符
  9. 网易buff服务器不稳定,《梦幻西游》手游平民94方寸逆袭成神分享心得助你腾飞_ 《梦幻西游》手游官网-人人都玩,无处不在...
  10. (已解决)vue数组添加数据后页面无法实时渲染
  11. HTTP 错误 404.3 – Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
  12. 【应急】应急信息“一张图”,福建省是这样用的
  13. pythonclass语法_【python类别概念自学】class的语法整理(继承、抽象类别、魔术方法)...
  14. 安卓-QQ-课程设计
  15. eclipse 关闭英文拼写检查,关闭xml验证
  16. 华为当个pl怎么样_pl什么(华为的pl是什么岗位)
  17. 小程序基础篇-视图与逻辑
  18. 模拟退火算法(数学建模清风)
  19. vuex4.x+ts的简单用法
  20. Android Broadcast详解

热门文章

  1. IDA 7.0 如何使用 IDAGolangHelper插件
  2. 数据结构之交换排序:快速排序
  3. 字符串经典题之大数相加
  4. RCF - C ++的进程间通信
  5. Java版二叉树遍历,查找,顺序化存储代码实现
  6. Shell整数型变量自增自减的实现方式(+1,-1,++,--)
  7. python多进程管道通信(精)
  8. C/C++:Windows编程—IAT Hook实例(程序启动拦截)
  9. Ajax提交打开新窗口,浏览器拦截处理;以及跨域问题
  10. DB2行转列(多维度)