Spring Bean
Spring Bean
Spring Bean的开发需要讲Bean配置在Spring的配置文件中。Spring框架支持XML和Properties两种格式的配置文件,常用XML进行配置。
XML的配置文件的根元素是< beans>,< beans>中包括了多个< bean>子元素,< bean>元素定义一个Bean,并描述Bean如何被装配到Spring中,常见属性及其子元素如下:
| 属性或子元素名称 | 描 述 |
|---|---|
| id | Bean在BeanFactory中的唯一标识,在代码中通过BeanFactory获取Bean实例时需要以此作为检索名称 |
| class | Bean的具体实现类,使用类的名(如xxxxImpl) |
| scope | 指定Bean实例的作用域 |
| < constructor-arg > | < bean>元素的子元素,使用构造方法注入,指定构造方法的参数。该元素的index属性指定参数的序号,ref属性指定对BeanFactory中其他Bean的引用关系,type属性指定参数类型,value属性指定常量值 |
| < property> | < bean>元素的子元素,用于设置一个属性,该元素的name属性指定Bean实例中相应的属性名称,value属性指定Bean的属性值,ref属性指定属性对BeanFactory中其他Bean的引用关系 |
| < list> | < property>元素的子元素,用于封装Map类型的依赖注入。 |
| < set> | < property>元素的子元素,用于封装Set类型的依赖注入。 |
| < entry> | < map>元素的子元素,用于设置一个键盘值对。 |
Bean的配置示例代码:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 将指定类TestDIDaoImpl配置给Spring,让Spring创建其实例 -->
<bean id="myTestDIDao" class="dao.TestDIDaoImpl" />
<!-- 使用构造方法注入 -->
<bean id="testDIService" class="service.TestDIServiceImpl">
<!-- 将myTestDIDao注入到TestDIServiceImpl类的属性 testDIDao上-->
<constructor-arg index="0" ref="myTestDIDao"/>
</bean>
<!-- 使用setter方法注入 -->
<bean id="testDIService1" class="service.TestDIServiceImpl1">
<!-- 调用TestDIServiceImpl1类的setter方法,将myTestDIDao注入到 TestDIServiceImpl1类的属性testDIDao上-->
<property name="testDIDao" ref="myTestDIDao"/>
</bean>
</beans>
静态工厂实例化配置文件示例代码:
<!-- 静态工厂方法实例化Bean,createInstance为 静态工厂类BeanStaticFactory中的静态方法-->
<bean id="staticFactoryInstance" class="instance.BeanStaticFactory" factory-method="createInstance"/>
实例工厂实例化配置文件示例代码:
<!-- 配置工厂 -->
<bean id="myFactory" class="instance.BeanInstanceFactory"/>
<!-- 使用factory-bean属性指定配置工厂 ,使用factory-method属性指定使用工厂中哪个方法实例化Bean-->
<bean id="instanceFactoryInstance" factory-bean="myFactory" factory-method="createBeanClassInstance"/>
Bean的作用域:
| 作用域名称 | 描 述 |
|---|---|
| singleton | 默认的作用域,使用singleton定义的Bean在Spring容器中只有一个实例 |
| prototype | Spring容器每次获取prototype定义的Bean,容器都将创建一个新的Bean实例 |
| request | 再一次HTTP请求中容器将返回一个Bean实例,不同的HTTP请求返回不同的Bean实例。仅在Web Spring应用程序上下文中使用 |
| session | 在一个HTTP Session中,容器将返回同一个Bean实例。仅在Web Spring应用程序上下文中使用 |
| application | 为每个ServletContext对象创建一个实例,即同一个应用共享一个Bean实例。仅在Web Spring应用程序上下文中使用 |
| websocket | 为每个WebSocket对象创建一个Bean实例。仅在Web Spring应用程序上下文中使用 |
singleton作用域:
当bean的scope设置为singleton时,Spring IoC容器仅生成和管理一个Bean实例。在使用id或name获取Bean实例时,IoC容器将返回共享的Bean实例。singleton是scope的默认方式。
prototype作用域:
当将bean的scope设置为prototype时,Spring IoC容器将为每次请求创建一个新的实例。
Bean的生命周期
一个对象的生命周期包括创建、使用、销毁等阶段,Bean对象也遵循这一过程,但是Spring开放了许多对外接口允许开发者对Spring的三个周期(实例化、初始化、销毁)的前后过程进行一些操作。其中实例化为Bean对象开辟空间,初始化是对对象属性的初始化。
配置Bean实现对过程的xml控制示例代码如下:
<!-- 配置bean,使用init-method属性指定初始化方法,使用destroy-method属性指定销毁方法-->
<bean id = "beanLife" class = "life.BeanLife" init-method = "initMyself" destroy-method = "destroyMyself"/>
基于注解的装配
在Spring框架中,尽管使用XML配置文件可以简单的装配Bean,但如果应用中有大量的Bean需要装配时,则需要一个方便升级维护并减少文件冗杂度的方式,这时便推荐使用注解方式进行装配。
常用的注解:
@Component该注解是为了表示一个组件对象,可以作用在任何层次上
@Repository该注解主要用于DAO(数据访问层)的类表示
@Service该注解主要用于Service(业务逻辑组件)类的表示
@Contorller该注解主要用于SpringMVC的Controller的类标识
@Autowired自动装配可用来自动装配getter、setter方法
@Resource该注解有两个属性name和type。name指定Bean实例的名称,即按照名称装配注入;type属性指定Bean类型,即按照类型进行装配
@Qualifier需要与@Autowired注解配合使用。当@Autowired注解需要按照名称来装配注入时需要和该注解一起使用,Bean的实例名称由@Qualifier的参数指定。
参考教材《JavaEE框架整合开发入门到实战》侵删。
本人现役大三小白一枚,如有不足之处还望指正。

浙公网安备 33010602011771号