15 Spring Bean装配

版权声明:本文为博主原创文章,未经博主允许不得转载。 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 接口

  1. Spring 中提供了一些以Aware 结尾的接口,实现了Aware接口的bean在被初始化之后,可以获取响应资源;
  2. 通过Aware接口,可以对Spring响应资源进行操作(一定要慎重)
  3. 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 方法。

猜你喜欢

转载自blog.csdn.net/hxdeng/article/details/82904346