今天看到网上有转载的获得Spring Bean的方法,觉得值得珍藏,现摘录在此。
众所周知,Spring框架将DI模式发挥到了极至,因此,系统里面用Spring管理的Bean相互之间的获取是非常
方便的,只要使用者提供一个setter方法并在配置文件中配置该属性就可以。
但是,对于系统中非Spring框架管理的类,如果需要获取Spring管理的类,或者,程序中需要动态的根据Be
an的id来获取Bean实例,不可能事先为该类提供所有需要的Bean属性的setter方法,在类似这样的情况下,
获取Spring框架管理的类实例的方法有多种,现在简单总结如下:
方法一:在初始化时保存ApplicationContext对象
代码:
ApplicationContext ac = new FileSystemXmlApplicationContext("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。
方法三:继承自抽象类ApplicationObjectSupport
说明:
抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。
方法四:继承自抽象类WebApplicationObjectSupport
说明:
类似上面方法,调用getWebApplicationContext()获取WebApplicationContext
方法五:实现接口ApplicationContextAware
说明:
实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。Spring初始化时,会通过该方法将ApplicationContext 对象注入。
以上方法适合不同的情况,请根据具体情况选用相应的方法。
这里值得提一点的是,系统中用到上述方法的类实际上就于Spring框架紧密耦合在一起了,因为这些类是知
道它们是运行在Spring框架上的,因此,系统中,应该尽量的减少这类应用,使系统尽可能的独立于当前运
行环境,尽量通过DI的方式获取需要的服务提供者。
方法五比较可行,可以设计一个工具类,专门来获取Spring中的类。减少对业务代码的侵入性。
分享到:
相关推荐
例如,`spring-beans.xsd`定义了bean元素,`spring-context.xsd`则定义了与上下文相关的元素,如context:component-scan用于扫描并自动注册bean。 总的来说,Spring框架4.2.4.RELEASE提供了强大的功能,包括依赖...
1. **智能提示与自动完成**:Spring Assistant能够自动识别项目中的Bean定义,并在编写XML配置文件时提供智能提示,包括Bean的属性、方法等,这使得开发者无需记忆复杂的Spring API,只需专注于业务逻辑。...
Spring MVC的工作流程包括:接收请求、调度到处理器映射器、找到对应的控制器方法、执行业务逻辑、通过模型视图对象填充数据、最后由视图渲染结果并返回给客户端。这一模式使得开发者能够专注于业务逻辑,而不必关心...
这份"Spring5框架课堂笔记.7z"压缩包包含了深入理解Spring5框架的关键知识点,帮助学习者系统地掌握这一强大的框架。以下是笔记中可能涵盖的主要内容: 1. **Spring概述**:Spring是一个开源的Java平台,它简化了...
Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大...
- **配置SqlSessionFactory**:创建一个配置文件,定义数据源、事务管理器以及SqlSessionFactory,可以使用Spring的Bean配置或者Java配置。 - **配置Mapper**:为每个Mapper接口创建XML配置文件,指定SQL语句和...
4. **Bean**:在 Spring 中,应用对象被称为 Bean。IoC 容器负责创建、初始化、配置和管理这些 Bean。Bean 可以通过 XML 文件、注解或 Java 配置类进行定义。 5. **AOP 代理**:Spring 使用 AOP 代理来实现方法拦截...
在实际项目中,您可以通过解压 "spring-boot.7z" 文件获取一个已经搭建好的 Spring Boot 框架,然后根据需求进行定制和扩展。这个简易框架可能包含了基本的 MVC 结构、数据库配置、日志记录等功能,方便您快速上手...
在这个名为"spring所用jar包.7z"的压缩文件中,包含了进行Spring开发所需的各类jar包,确保了项目能够正常运行。下面将详细解释其中的关键知识点。 首先,`junit-4.10.jar`是JUnit测试框架的一个版本,它是Java编程...
这个"Spring5框架课堂课件.7z"压缩包包含了关于Spring5框架的详细教学资料,主要帮助学习者深入理解并掌握Spring框架的最新版本——Spring5。以下是基于这个主题的详细知识点讲解: 1. **Spring概述**:Spring是一...
《Spring框架源码学习指南——基于spring-framework-nogit.7z》 Spring框架作为Java领域最广泛应用的轻量级框架之一,其设计理念和实现机制对于开发者来说具有极高的学习价值。本文将针对"spring-framework-nogit.7...
1. **延迟初始化**: Spring容器在遇到`FactoryBean`时,不会立即创建bean,而是在需要该bean时才通过`getObject()`方法进行实例化,这实现了对象的延迟初始化。 2. **类型转换**: Spring会根据`getObjectType()`返回...
3. **Bean管理**:Spring容器负责创建、初始化、装配及管理Bean。开发者可以使用XML配置、注解配置或Java配置来定义Bean的行为。 4. **数据访问集成**:Spring提供了JDBC抽象层,简化了数据库操作;同时支持ORM...
`spring-framework-4.0.0.RELEASE.7z`是一个包含Spring框架4.0.0版本源码的压缩文件,便于开发者深入理解其内部工作原理,进行定制化开发或优化。 1. **控制反转(Inversion of Control, IoC)**:Spring的核心特性...
提供的"SpringMvc+Spring+Mybatis+Maven整合示例源码.7z"文件可能包含一个完整的整合示例,你可以下载后进行学习和参考。"SpringMvc+Spring+Mybatis+Maven整合视频教程.docx"文档可能会详细讲解整合过程和相关知识点...
自定义的注解可能会影响到bean的初始化、销毁方法,或者改变bean的生命周期行为。因此,熟悉`@PostConstruct`、`@PreDestroy`,以及`InitializingBean`、`DisposableBean`接口至关重要。 综上所述,"spring-custom-...
1. **实例化**:当Spring容器遇到一个带有@Bean注解的方法或XML配置中的<bean>标签时,它会负责调用该方法或通过无参构造函数实例化Bean。在这个阶段,可以通过工厂方法或构造器注入来控制Bean的创建。 2. **属性...
1. **自动配置**:基于`@EnableAutoConfiguration`注解,Spring Boot会根据项目依赖自动配置相应的bean,省去了大量XML配置。 2. **内嵌式容器**:支持Tomcat、Jetty等内嵌式Web服务器,无需额外安装,简化部署。 3....
在 Spring 中,Bean 是由 IoC 容器管理的对象,它们通过 XML 配置文件或注解进行定义。 **AOP(面向切面编程)** Spring 提供了面向切面编程的支持,允许开发者定义“切面”,这些切面可以包含业务逻辑的某个方面...
文档通常包含用户指南、参考手册、API文档等,它们对于学习和理解Spring的各个特性和使用方法至关重要。开发者可以从中获取关于如何配置、初始化、使用Spring组件的详细信息,以及有关最佳实践、常见问题和解决策略...