- 浏览: 257924 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (289)
- java (72)
- oracle (3)
- mysql (5)
- spring (28)
- hibernate (2)
- osgi (0)
- linux (2)
- ExtJs (1)
- jvm (0)
- mybatis (7)
- 分布式 (11)
- MINA (6)
- apache+tomcat (13)
- js+htm (7)
- android (44)
- http (1)
- hbase+hdoop (0)
- memcache (13)
- search (27)
- 部署及性能 (12)
- mongoDB (2)
- 多线程 (12)
- 安全管理验证 (9)
- struts (1)
- webservice (0)
- easyUI (1)
- spring security (16)
- pattern (6)
- 算法 (2)
最新评论
-
lzh8189146:
CommonsHttpSolrServer这个类,现在是不是没 ...
CommonsHttpSolrServer -
xiaochanzi:
我按照你的方法试了下,tomcat6可以发布,但是访问任何网页 ...
基于内嵌Tomcat的应用开发 -
phoneeye:
麻烦你,如果是抄来的文章,请给出来源。谢谢
ant 两则技巧 -
neverforget:
转载不注明出处
Spring Security3.1登陆验证 替换 usernamepasswordfilter -
liang1022:
若不使用eclipse ,如何在命令行下 运行服务端程序 ?
WebService CXF学习(入门篇2):HelloWorld
Spring在web应用中获得Bean的方法
- 博客分类:
- spring
一:使用ApplicationContext获得Bean
首先新建一个类,该类必须实现ApplicationContextAware接口,改接口有一个方法,public void setApplicationContext(ApplicationContext applicationContext)throws BeansException ,
也就是说框架会自动调用这个方法返回一个ApplicationContext对象。具体类如下:
- public class SpringContextUtils implements ApplicationContextAware{//Spring的工具类,用来获得配置文件中的bean
- private static ApplicationContext applicationContext = null;
- /***
- * 当继承了ApplicationContextAware类之后,那么程序在调用
- * getBean(String)的时候会自动调用该方法,不用自己操作
- */
- public void setApplicationContext(ApplicationContext applicationContext)throws BeansException {
- SpringContextUtils.applicationContext = applicationContext;
- }
- public static ApplicationContext getApplicationContext() {
- return applicationContext;
- }
- /***
- * 根据一个bean的id获取配置文件中相应的bean
- * @param name
- * @return
- * @throws BeansException
- */
- public static Object getBean(String name) throws BeansException {
- return applicationContext.getBean(name);
- }
- /***
- * 类似于getBean(String name)只是在参数中提供了需要返回到的类型。
- * @param name
- * @param requiredType
- * @return
- * @throws BeansException
- */
- public static Object getBean(String name, Class requiredType) throws BeansException {
- return applicationContext.getBean(name, requiredType);
- }
- /**
- * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
- * @param name
- * @return boolean
- */
- public static boolean containsBean(String name) {
- return applicationContext.containsBean(name);
- }
- /**
- * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。
- * 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
- * @param name
- * @return boolean
- * @throws NoSuchBeanDefinitionException
- */
- public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
- return applicationContext.isSingleton(name);
- }
- /**
- * @param name
- * @return Class 注册对象的类型
- * @throws NoSuchBeanDefinitionException
- */
- public static Class getType(String name) throws NoSuchBeanDefinitionException {
- return applicationContext.getType(name);
- }
- /**
- * 如果给定的bean名字在bean定义中有别名,则返回这些别名
- * @param name
- * @return
- * @throws NoSuchBeanDefinitionException
- */
- public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
- return applicationContext.getAliases(name);
- }
- }
该类中有一个getBean(String name)方法,该方法用applicationContext去获得Bean实例,而applicationContext
是由系统启动时自动设置的。注意,在applicationContext.xml配置文件中需要把该类加上。<bean id="springUtils" class="en.estar.utils.SpringContextUtils"/>
二:通过BeanFactory接口获得Bean
也是新建一个类,不过该类需要实现BeanFactoryAware接口,该接口有一个方法public void setBeanFactory(BeanFactory beanFactory) throws BeansException;该方法是为了设置BeanFactory对象,系统会在启动的时候自动设置BeanFactory。具体代码如下:
- public class SpringBeanFactoryUtils implements BeanFactoryAware {
- private static BeanFactory beanFactory = null;
- private static SpringBeanFactoryUtils factoryUtils = null;
- public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
- SpringBeanFactoryUtils.beanFactory = beanFactory;
- }
- public static BeanFactory getBeanFactory() {
- return beanFactory;
- }
- public static SpringBeanFactoryUtils getInstance(){
- if(factoryUtils==null){
- //factoryUtils = (SpringBeanFactoryUtils)beanFactory.getBean("springBeanFactoryUtils");
- factoryUtils = new SpringBeanFactoryUtils();
- }
- return factoryUtils;
- }
- public static Object getBean(String name){
- return beanFactory.getBean(name);
- }
- }
不过应该注意的是,改类中有一个getInstance方法,由于该代码是网上摘抄的,他提供了这么一个方法,目的是利用单例模式获得该类的一个实例,但由于getBean(String name)方法是静态的,所以用不用单例都无关紧要,经过测试,两种方法都行的通。另外一点就是必须把该类添加到applicationContext.xml的配置文件中<bean id="springBeanFactoryUtils" class="en.estar.utils.SpringBeanFactoryUtils"/>
三:在servlet中可以用WebApplicationContext类去获取Bean,具体做法是:
- WebApplicationContext webcontext = (WebApplicationContext)context.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
其中context是servlet的上下文,在servlet中可以通过this.getServletContext()或者request.getSession().getServletContext();获得servletContext。但是一点,spring的配置文件必须在WEB-INF下。WebApplicationContext 有一个方法getBean(String name);其实WebApplicationContext 就是ApplicationContext的另一种形式而已。
另外,在普通的java类中,即不是在servlet中可以用ContextLoader获得。ContextLoader是org.springframework.web.context包当中的一个类。
- private static WebApplicationContext webApplication = ContextLoader.getCurrentWebApplicationContext();
用这种方法就能获取一个WebApplicationContext 的对象。
最后经过测试,在重复100000次的基础上,第一二中方法只用了16毫秒,而第三种方法消耗了62毫秒,所以推荐使用第一二种方法。
发表评论
-
主题:Spring MVC3 国际化配置
2012-04-13 08:30 771http://www.iteye.com/topic/1122 ... -
使用 Spring Data JPA 简化 JPA 开发
2012-04-13 08:30 890http://www.ibm.com/developerwor ... -
跟我学spring3 电子书下载(完)
2012-04-13 08:30 634http://www.iteye.com/topic/1122 ... -
spring 读取applicationContext方式
2012-04-12 08:02 1019spring 读取applicationCont ... -
spring javamail
2012-04-11 08:00 743spring javamail 博客分类 ... -
Quartz在Spring中动态设置cronExpression
2012-04-11 08:00 639Quartz在Spring中动态设置cronEx ... -
spring定时器用Annotation实现
2012-04-10 08:28 777spring定时器用Annotation实现 ... -
spring 3 中使用注解的方式来进行任务调度。
2012-04-10 08:28 731spring 3 中使用注解的方式来进行任务调度。 ... -
spring定时器如何配置
2012-04-10 08:28 1028有两种流行Spring定时器配置:Java的Timer类 ... -
Spring3.0中的异常处理配置方法
2012-04-10 08:28 775Spring3.0中的异常处理配置方法 ... -
在Spring3中使用注解(@Scheduled)创建计划任务
2012-04-09 09:49 1248在Spring3中使用注解(@Scheduled ... -
利用 Spring 和 EHCache 做方法缓存处理〔转〕
2012-04-09 09:49 831利用 Spring 和 EHCache 做方法缓存处理〔 ... -
springmvc rest框架搭建中遇到的问题
2012-03-16 14:37 951springmvc rest框架搭建中遇到的问题(一) ... -
spring 3.0 应用springmvc 构造RESTful URL 详细讲解
2012-03-16 14:36 677http://badqiu.iteye.com/blog/47 ... -
MyBatis3整合Spring3的Transaction事务处理
2012-03-07 08:18 904MyBatis3整合Spring3的Transacti ... -
spring mvc 注解验证springmodules common validator (注解验证)
2012-03-02 09:21 2011转载:http://blog.csdn.net/h ... -
spring结合quartz的定时的2种方式
2012-03-02 09:21 761spring结合quartz的定时的2种方式 ... -
spring结合quartz的执行多任务的实现
2012-03-02 09:21 1854spring结合quartz的执行多任务的实现 ... -
在Spring中使用JTA事务管理(二)
2012-02-28 08:15 993在Spring中使用JTA事务管理(二) (20 ... -
spring 事务 不能rollback的问题终于解决了
2012-03-19 08:24 860spring 事务 不能rollback的问题 ...
相关推荐
这里我们将详细探讨如何在Java中通过Spring获取配置的bean。 1. **BeanFactory与ApplicationContext** - **BeanFactory** 是Spring中最基础的IoC容器,负责管理和实例化Bean。它允许开发者定义Bean的生命周期和...
- **销毁回调**:当Spring容器关闭时,或者单例Bean不再需要时,会调用`@PreDestroy`注解的方法或者在XML中指定的`destroy-method`属性的方法。 - ** Prototype Beans不保证销毁**:由于Prototype Bean可能有多个...
当需要在线程中获取Spring注解的bean时,有几种常见的方法: 1. **ThreadLocal**:Spring提供了一种名为`ThreadLocalTargetSource`的特殊`TargetSource`实现,可以将bean实例绑定到当前线程。这样,每个线程都有其...
以下是如何在Servlet中直接获取Spring框架中的Bean的方法。 首先,我们理解Spring容器,即ApplicationContext,它是管理Bean的核心组件。它负责读取配置文件(如XML或Java配置),创建并初始化Bean,以及维护它们...
"基于OSGi和Spring开发Web应用" OSGi(Open Service Gateway Initiative)是一种面向服务的框架,能够提供动态模块部署和管理的能力。Spring 是一个轻量级的J2EE开发框架,特点是面向接口编程和非侵入式的依赖注入...
4. **setter方法注入**:使用`@Autowired`注解在setter方法上,Spring会在运行时调用setter方法注入Bean。 **Spring框架的组件** Spring框架由多个模块组成,包括: 1. **Core Container**:包括Core和Beans模块...
在 Spring 框架中,获取 Bean 是一个非常重要的步骤,因为它是使用 Spring 框架的基础。Spring 提供了多种方式来获取 Bean,这些方式可以根据不同的应用场景选择使用。 通过 XML 配置文件获取 Bean 在 Spring 框架...
通过以上两种方法,我们可以在Spring应用中灵活地获取所需的Bean实例。第一种方法适用于Web应用环境,而第二种方法则更加通用,可以在任何环境中使用。这两种方式都避免了硬编码Bean的获取逻辑,使得代码更加灵活和...
在描述中提到的博客链接(由于实际无法访问,这里仅做理论分析),可能会详细探讨如何在实际项目中结合Groovy和Spring进行Web开发,包括Groovy的脚本配置、Bean定义、以及可能的Grails框架应用实例。 标签"源码"和...
在Spring Boot框架中,普通类调用bean是常见的操作,特别是在构建复杂应用时。这篇博客“17. Spring Boot普通类调用bean【从零开始学Spring Boot】”旨在指导初学者如何在非Spring管理的类中访问和使用Spring容器中...
本文将总结几种在代码中获取Spring Bean的方法,以供学习和工作中参考。 **1. 通过`ContextLoader.getCurrentWebApplicationContext()`获取** 这种方式适用于Web应用程序,不依赖于Servlet。在服务器启动后,...
- session:在一个HTTP Session中只会创建一个Bean实例,同样只适用于Web应用。 4. Spring容器中Bean的生命周期: Spring通过一系列的回调方法来管理Bean的生命周期,包括初始化和销毁时的操作。 - 通过<bean>...
在Web项目中集成Spring是一个常见的开发实践,Spring框架以其强大的依赖注入、面向切面编程以及丰富的功能模块,极大地简化了Java Web应用的开发。本文将深入探讨如何在Web项目中集成Spring,包括Spring MVC的使用、...
在Web应用中,Spring MVC作为其Web层的一部分,用于处理HTTP请求和响应。 2. **Jetty服务器**:Jetty是一款开源的、轻量级的HTTP服务器和Servlet容器,它快速、小巧且易于集成。Jetty不依赖于特定的Java EE容器,这...
在提供的压缩包文件"Spring-demo"中,可能包含了Spring Web应用的示例代码,包括配置文件、Controller类、视图文件等,可以帮助开发者了解如何实际操作Spring框架进行Web开发。学习和理解这些组件及其工作原理,对于...
- `request`、`session`、`globalSession`:这些是在Web应用中使用的,分别对应HTTP请求、会话和全局会话的范围。 7. **AOP(面向切面编程)** Spring提供了一种基于代理的AOP实现,可以在不修改源代码的情况下,...
在 Java 应用中,我们可以创建一个主类来启动应用程序,并从 Spring 容器中获取 Bean 实例。例如: ```java public class MainApp { public static void main(String[] args) { ApplicationContext context = new...
在`@Bean`方法中,Spring会调用这个方法来创建Bean实例,并自动处理依赖注入。如果你的类有依赖,可以在`@Bean`方法内部创建并注入。 在`spring-boot-hello3`这个项目中,很可能是演示了如何通过Java配置创建和注册...
在Spring框架中,`Spring-Aware`接口是一个重要的概念,它允许我们与Spring的应用上下文(ApplicationContext)进行交互,从而获取或操作由Spring管理的Bean。`ApplicationContextAware`是其中的一个典型接口,当...
Spring框架是Java开发中不可或缺的一部分,它为构建高效、可重用的Web应用程序提供了强大的支持。在本讨论中,我们将深入探讨两个核心组件——`spring-web.jar`和`spring-webmvc.jar`,它们在Spring MVC框架中扮演着...