`

Web项目中获取SpringBean——在非Spring组件中获取SpringBean

 
阅读更多

转自:http://www.cnblogs.com/Johness/archive/2012/12/25/2833010.html

 最近在做项目的时候我发现一个问题:Spring的IOC容器不能在Web中被引用(或者说不能被任意地引用)。我们在配置文件中让Spring自动装配,但并没有留住ApplicationContext的实例。我们如果希望在我们的项目中任何位置都能拿到同一个ApplicationContext来获取IOC容器中的资源,就要让Spring将上下文环境填充到我们能获取的地方,比如下面的做法(来自网络资源):

  自定义一个工具类,实现自ApplicationContextAware接口,接口的方法是setApplicationContext,我们实现它,并让其为我们服务,因为Spring在load自己的时候会将上下文环境填充进来。我们所要做的就是将得到的ApplicationContext保存下来用。

复制代码
 1 package org.coderecord.ccms.web.action.util;
 2 
 3 import org.springframework.beans.BeansException;
 4 import org.springframework.context.ApplicationContext;
 5 import org.springframework.context.ApplicationContextAware;
 6 
 7 /**
 8  * Spring IOC上下文工具类
 9  * 
10  * @author Ryan Shaw
11  * 
12  */
13 public class SpringUtil implements ApplicationContextAware {
14 
15     /**
16      * 当前IOC
17      */
18     private static ApplicationContext applicationContext;
19 
20     /**
21      * 设置当前上下文环境,此方法由spring自动装配
22      */
23     @Override
24     public void setApplicationContext(ApplicationContext arg0)
25             throws BeansException {
26         applicationContext = arg0;
27     }
28 
29     /**
30      * 从当前IOC获取bean
31      * 
32      * @param id
33      *            bean的id
34      * @return
35      */
36     public static Object getObject(String id) {
37         Object object = null;
38         object = applicationContext.getBean(id);
39         return object;
40     }
41 
42 }
复制代码

  上文的类就是我们要用的,而其中的setApplicationContext是接口中需要实现的,Spring会自动进行填充。我们在Spring的配置文件中注册一下:

1 <bean id="springUtil" class="org.coderecord.ccms.web.action.util.SpringUtil" />

  这样就可以了,Spring把我们需要的东西给我们了。

  我们就可以在需要的地方这样做:

1 YouClass obj = (YouClass)SpringUtil.getObject("beanid");

  当然,前提是你需要让Spring自动装配哦。

  

  以下为方法二,使用了注解和静态化的方式来产生SpringFactory对象

  来自网络资源,修改于2013-04-11 15:25:57 

  上文的方法有个麻烦的地方:需要配置。而Spring2.5及之后的版本实际上加入了注解的方式进行依赖项的注入,使用如下代码也许更好:

复制代码
 1 package org.ahe.util;
 2 
 3 import org.springframework.beans.factory.BeanFactory;
 4 import org.springframework.beans.factory.annotation.Autowired;
 5 import org.springframework.web.context.support.SpringBeanAutowiringSupport;
 6 
 7 public class SpringWiredBean extends SpringBeanAutowiringSupport {
 8 
 9     /**
10      * 自动装配注解会让Spring通过类型匹配为beanFactory注入示例
11      */
12     @Autowired
13     private BeanFactory beanFactory;
14 
15     private SpringWiredBean() {
16     }
17 
18     private static SpringWiredBean instance;
19 
20     static {
21         // 静态块,初始化实例
22         instance = new SpringWiredBean();
23     }
24 
25     /**
26      * 实例方法
27      * 使用的时候先通过getInstance方法获取实例
28      * 
29      * @param beanId
30      * @return
31      */
32     public Object getBeanById(String beanId) {
33         return beanFactory.getBean(beanId);
34     }
35 
36     public static SpringWiredBean getInstance() {
37         return instance;
38     }
39 }
复制代码

  如果使用@Autowired注解自动装配的话,继承SpringBeanAutowiringSupport类是不能少的。当然,使用@Component等注解也是可以的。使用注解的话配置就需要改动了,不过因为我们为支持Spring注解的配置是可以多用的,所以还好。如下:

1 <context:component-scan base-package="org.ahe"></context:component-scan>

  该配置即可让org.ahe下所有包(您依然可以通过子标签的正则表达式匹配来进行更多设置)下的注解起作用。

分享到:
评论

相关推荐

    在web项目中引入spring

    在实践中,引入Spring可以大大提高Web项目的开发效率和质量,通过合理利用其提供的各种组件和功能,我们可以构建出松耦合、可测试且易于维护的系统。同时,随着Spring Boot和Spring Cloud的发展,Spring生态已经涵盖...

    Spring开发指南——中文版

    通过《Spring开发指南——中文版》,读者可以系统学习Spring框架的各个方面,提升在实际项目中的开发效率和质量。该书详细介绍了这些知识点,并通过实例演示了如何在实际开发中应用。阅读并实践这本书的内容,对于想...

    Spring MVC Ibatis Bean 根据mysql数据表——代码生成工具

    在实际项目中,为了提高开发效率,开发者通常会利用代码生成工具,将MySQL数据库中的数据表自动生成对应的Spring MVC Controller、Service、DAO、Entity(Bean)等代码。这种自动化流程能减少手动编写重复代码的工作...

    Spring——jar详解

    其他所有Spring组件都依赖于这个jar。 2. **spring-beans.jar**:这个jar提供了bean的定义、创建和管理,以及IoC/DI的核心实现。它是所有Spring应用的基础,无论应用大小,都需要这个jar。 3. **spring-aop.jar**...

    Spring——jar包详解

    例如,`org.springframework.context.ApplicationContext`接口定义了获取bean和发布事件的方法,而`org.springframework.web.servlet.DispatcherServlet`则是Spring MVC的核心组件,负责处理HTTP请求。 总的来说,...

    手工完成java项目(二)——web项目

    在这个项目中,"testweb"很可能就是我们的项目根目录,它将包含这些组件的相关文件和配置。 1. **项目结构**:在"testweb"目录下,我们可能会看到如下的文件夹和文件: - `WEB-INF`:这个目录是Web应用的核心,...

    SpringWebDemo.zip

    通过"SpringWebDemo.zip"项目的学习,我们可以更好地理解和掌握SSM框架的整合与配置,以及Spring配置类在实际项目中的应用。这种方式不仅提高了开发效率,也降低了配置错误的可能性,使得Java Web开发变得更加高效和...

    springDemo

    在"springDemo"中,我们可以学习如何定义Bean的配置,以及如何通过ApplicationContext获取Bean实例。 四、面向切面编程(AOP) AOP是Spring的另一大特色,它提供了一种处理横切关注点(如日志、事务管理等)的机制...

    spring-web.jar spring-webmvc.jar

    在本讨论中,我们将深入探讨两个核心组件——`spring-web.jar`和`spring-webmvc.jar`,它们在Spring MVC框架中扮演着关键角色。 首先,`spring-web.jar`是Spring框架的Web层组件,它提供了与Web相关的功能。这个库...

    Spring3.1.3 Ioc在Web容器中的建立

    标题 "Spring3.1.3 Ioc在Web容器中的建立" 涉及的是Spring框架的一个关键特性——依赖注入(Dependency Injection,简称DI),以及如何在Web应用环境中配置和使用它。Spring是Java开发中最流行的轻量级框架之一,...

    spring學習筆記——Helloworld

    在本篇“Spring学习笔记——HelloWorld”中,我们将探讨Spring框架的基础知识,以及如何创建一个简单的Spring应用程序。Spring是一个广泛使用的Java企业级应用开发框架,它提供了丰富的功能,包括依赖注入、AOP...

    Spring Web MVC外文翻译

    正式名称“Spring Web MVC”来源于其源模块 `spring-webmvc`,但在实际使用中更常见地被称为“Spring MVC”。 与 Spring Web MVC 并行地,Spring Framework 5.0 引入了响应式栈——一个名为 Spring WebFlux 的 Web ...

    spring-mybatis-struts2-master ——demo

    在"spring-mybatis-struts2-master"项目中,可以看到Spring的配置文件(如:applicationContext.xml),其中定义了Bean的实例化规则,包括数据库连接池、SqlSessionFactory等关键组件。 二、MyBatis框架 MyBatis是...

    spring3.0_doc_api

    Spring 3.0是Spring框架的一个重要版本,它在2009年发布,带来了许多...在实际开发中,结合API文档,开发者可以快速定位到需要的方法或类,理解其工作原理,解决遇到的问题,从而更有效地利用Spring 3.0框架进行开发。

    Spring MVC-Web(4)

    Spring MVC 是一个强大的Java Web开发框架,用于构建高效、可维护的Web应用...通过阅读"实验4 Spring MVC——Web.pdf"和研究"qasystemraw"、"qasystem"的实际项目,你可以更全面地掌握Spring MVC在实际应用中的运用。

    org.springframework.web-3.0.0.RC3.jar

    在本文中,我们将深入探讨Spring Web框架的3.0.0.RC3版本,以及该版本中的核心组件和关键特性。 一、Spring框架概述 Spring框架以其模块化设计著称,允许开发者根据项目需求选择使用特定模块。Spring Web模块是...

    ssmdemoMybatis+Spring+SpringMVC5.0.zip_CE5.0_V淘宝网上商城_java web项目_

    《SSM框架整合在Java Web项目中的应用——以“ssmdemoMybatis+Spring+SpringMVC5.0”为例》 在当前的Java Web开发领域,Spring、SpringMVC和Mybatis作为三大核心框架,被广泛应用于构建复杂的企业级应用。本项目...

    org.springframework.web.servlet-3.1.0.RELEASE.jar.zip

    在实际开发中,开发者还需要了解如何配置Spring Web MVC,包括web.xml中的DispatcherServlet配置,以及Spring MVC配置文件中的bean定义。此外,对于大型项目,合理的Controller组织、Service层的设计以及DAO层的实现...

    项目配置文件( spring-mvc.xml spring-mybatis.xml web.xml log4j.properties)

    在IT行业中,项目配置文件是任何应用程序的核心组成部分,它们定义了系统的运行时行为。这里提到的四个关键配置文件——`spring-mvc.xml`、`spring-mybatis.xml`、`web.xml`以及`log4j.properties`,对于一个基于...

    J2EE项目实训Spring框架技术

    在本J2EE项目实训中,我们将深入探讨Spring框架的核心技术和应用。Spring是Java企业级应用开发中的一个关键组件,它提供了一整套强大的服务,包括依赖注入(DI)、面向切面编程(AOP)、数据访问、事务管理、Web MVC...

Global site tag (gtag.js) - Google Analytics