15 Spring Bean装配

Spring Bean

1. Bean配置

Bean常见配置

属性属性说明是否是必须
id在Spring 容器生命周期内唯一的标识N
class具体是要spring 容器管理的那个类Y
scopeBean 的作用域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 方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值