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框架整合开发入门到实战》侵删。
本人现役大三小白一枚,如有不足之处还望指正。

posted @ 2020-03-11 17:13  Aaron`Joe  阅读(77)  评论(0)    收藏  举报