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

标签: web 项目 springbean | 发表时间:2014-06-23 16:45 | 作者:spidermanzy
出处:http://www.iteye.com

转自: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下所有包(您依然可以通过子标签的正则表达式匹配来进行更多设置)下的注解起作用。



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [web 项目 springbean] 推荐:

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

- - 编程语言 - ITeye博客
转自:http://www.cnblogs.com/Johness/archive/2012/12/25/2833010.html.  最近在做项目的时候我发现一个问题:Spring的IOC容器不能在Web中被引用(或者说不能被任意地引用). 我们在配置文件中让Spring自动装配,但并没有留住ApplicationContext的实例.

web项目经理手册

- - 研发管理 - ITeye博客
        web项目指基于web的开发项目,由于web开发的一些特点,使得web开发的项目管理与以往的软件开发项目管理有很大的不同,具体表现在.         一般的web项目的周期为1~3月,而一般的软件开发的周期都在半年以上,象vista微软花费了五年的时间才开发出来.         互联网公司推出的产品,讲究快字当头,谁先推出产品占领市场,谁就取得先机,所以web的项目往往要求上线快,对于比较大的项目通常我们会先把产品先launch上线,然后第二期第三期再来完善.

十问Web网站项目

- - 博客园_新闻
英文原文: 10 Important Questions to Ask About Your Next Website Project. Ltd 开发者 Richa Jain 在本文中为我们带来了一个有趣的话题:在一个 Web 网站项目中,我们应该问自己十个这样的问题. 如果你在开发的过程中存在疑惑,或许你可以在本文中获得帮助.

xssProject在java web项目中应用

- - Java - 编程语言 - ITeye博客
1.项目引入xssProtect-0.1.jar、antlr-3.0.1.jar、antlr-runtime-3.0.1.jar包. * 覆盖getParameter方法,将参数名和参数值都做xss过滤. * 如果需要获得原始的值,则通过super.getParameterValues(name)来获取
.

eclipse如何导入myeclipse的web项目

- - 开源软件 - ITeye博客
1、进入项目目录,找到.project文件,打开. 2、找到...代码段. 3、在第2步的代码段中加入如下标签内容并保存:. 4、项目目录下的.classpath文件,把所有Webroot字符串改为WebContent,保存. 5、把目录下webroot的文件夹改名为WebContent.

Web项目管理工具精选

- - 行业应用 - ITeye博客
以前各种开源项目的代码都是通过博客和个人网页来发布的. 这种分享方式并不是最容易的一种,也不便于他人对代码做出贡献. 下面是几个管理项目代码的工具,不管对于个人开发者还是团队开发者来说,它们都是非常好用的. GitHub,也就是Git版本控制系统,采用一种优雅的方式来管理项目代码. 比起Subversion,Git要更加经济划算,对于新手来说安装过程也更加简单.

在 Web 项目中应用 Apache Shiro

- - 企业架构 - ITeye博客
Apache Shiro 是功能强大并且容易集成的开源权限框架,它能够完成认证、授权、加密、会话管理等功能. 认证和授权为权限控制的核心,简单来说,“认证”就是证明你是谁. Web 应用程序一般做法通过表单提交用户名及密码达到认证目的. “授权”即是否允许已认证用户访问受保护资源. 关于 Shiro 的一系列特征及优点,很多文章已有列举,这里不再逐一赘述,本文重点介绍 Shiro 在 Web Application 中如何实现验证码认证以及如何实现单点登录.

使用Spring Boot开发Web项目

- - ImportNew
前面两篇博客中我们简单介绍了spring Boot项目的创建、并且也带小伙伴们来DIY了一个Spring Boot自动配置功能,那么这些东西说到底最终还是要回归到Web上才能体现出它的更大的价值,so,今天我们就来看一下如何使用Spring Boot来开发Web项目. 当然,如果小伙伴对Spring Boot尚不熟悉的话,可以先参考一下这两篇博客:.

Web开发人员应当知道的15个开源项目

- alex - cnBeta.COM
如今,构建网站和开发Web应用程序已经不仅要求开发人员是一名优秀的程序员,更需要聪明的程序员. 这也就是说,在可能的情况下,重复使用已有的代码和应用程序,而不是自己重头开始. 开源由来已久,并且很多网站的构建也使用了开源. 开发人员都知道Linux、Apache、MySQL及 PHP (LAMP).