版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxdeng/article/details/82904346
Spring Bean
1. Bean配置
Bean常见配置
属性 | 属性说明 | 是否是必须 |
---|---|---|
id | 在Spring 容器生命周期内唯一的标识 | N |
class | 具体是要spring 容器管理的那个类 | Y |
scope | Bean 的作用域 | N |
constructor arguments | 构造器参数 | N |
properties | 属性 | N |
Autowiring mode | 自动装配的模式 | N |
laz-initialization mode | 懒加载模式 | N |
initalization/destruction methode | 初始化和销毁的方法 | N |
注意 如果是通过ID获取Bean,ID属性是必须的。如果是通过类型ID可以省略
2. Bean作用域
作用域 | 说明 |
---|---|
singleton | 单利模式,指一个Bean容器中只有一份实例(默认作用域) |
prototype | 每次请求(每次使用)创建新的实例,destroy 方式不生效 |
request | 每次http请求创建一个实例且仅在当前request内有效 |
session | 每次http请求创建一个实例,在当前session内有效 |
global session | 基于portlet的web中有效(portlet 定义了global session)如果是在web中,同session |
<bean id="" class="" scope="">
</bean>
3. Bean生命周期
Bean 的生命周期分为四部分
- 定义
- 初始化
- 使用
- 销毁
3.1 Bean初始化
Bean 初始化有两种方式,一种实现(org.springframework.beans.factory.InitializingBean)接口,重写afterPropertiesSet方法。另外一种配置initmethode属性
实现 InitializingBean 接口
public class ExampleInitializingBean implements InitializingBean{
@Override
public void afterPropertiesSex() throws Exception{
// init
}
}
配置init-method 属性
配置文件
<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init">
</bean>
Java 类
public class ExampleBean{
public void init(){
// init
}
}
3.2 Bean 销毁
Bean 的销毁同样有两种方法;一种实现(org.springframework.beans.factory.DisposableBean)接口,重写destroy方法。另外一种 配置destroy-method属性。
DisposableBean 接口
public class ExampleDisposableBean implements DisposableBean{
@Override
public void destroy() throws Exception{
}
}
配置destroy 属性
配置文件
<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup">
</bean>
Java类
public class ExampleBean{
public void cleanup(){
}
}
3.3 配置全局的初始化和销毁的方法
Spring 配置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"
default-init-method="defaultInit" default-destroy-method="defaultDestroy">
</beans>
注意 当三个同时使用的时候执行顺序:实现接口的要优先于bean中配置的。全局的无效;
4. Bean 装配之Aware 接口
- Spring 中提供了一些以Aware 结尾的接口,实现了Aware接口的bean在被初始化之后,可以获取响应资源;
- 通过Aware接口,可以对Spring响应资源进行操作(一定要慎重)
- Aware 接口为对Spring 进行简单的扩展提供了方便的入口
范例 实现ApplicationAware 接口获取当前IOC容器中的Bean对象
5. Bean自动装配
Bean 在没有设置自动注入前需要在Bean中通过 property 元素的 ref 属性手动注入。当我们选择自动装配后就无需设置property属性。
Spring Bean 自动装配有如下类型:
类型 | 说明 |
---|---|
no | 不做任何操作(默认方式) |
byName | 根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的Bean, 并将其与属性自动装配。 |
byType | 如果容器中存在一个与指定属性类型相同的Bean,那么将与该属性自动装配; 如果存在多个改类型Bean,那么跑出异常,并指出不能使用byType方式进行自动装配; 如果没有找到相应的Bean则什么事都不发生。 |
constructor | 与byType 方式类似,不同之处在于它应用于构造参数。 如果容器中没有找到与构造器参数类型一致的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" default-autowire="byName">
</beans>
6. Bean 注解
从 Spring 2.5 开始就可以使用注解来配置依赖注入。而不是采用 XML 来描述一个 bean 连线,你可以使用相关类,方法或字段声明的注解,将 bean 配置移动到组件类本身。
<context:component-scan/> 扫描指定的包中的类上的注解
<context:annotation-config />
<context:component-scan/> 注解就已经包含 <context:annotation-config /> 注解,所以一般只写包扫描路径即可
常见注解
编号 | 注解 | 注解说明 |
---|---|---|
1 | @Controller | 声明Action组件 |
2 | @Service | 声明Service组件 @Service(“myMovieLister”) |
3 | @Repository | 声明Dao组件 |
4 | @Component | 泛指组件, 当不好归类时. |
5 | @Resource | 用于注入,( j2ee提供的 )默认按名称装配,@Resource(name=“beanName”) |
6 | @Autowired | 用于注入,(Spring提供的) 默认按类型装配 |
7 | @Transactional( rollbackFor={Exception.class}) | 事务管理 |
8 | @Scope(“prototype”) | 设定bean的作用域 |
9 | @Qualifier | 通过指定确切的将被连线的 bean,@Autowired 和 @Qualifier 注解可以用来删除混乱。 |
10 | @Required | @Required 注解应用于 bean 属性的 setter 方法。 |