Spring Bean定义:
bean是一个被实例化,组装并通过Spring IOC容器进行管理的对象
bean的属性
属性 | 描述 |
---|---|
class | 用来指定bean的bean类 |
id/name | bean的唯一标识符 |
scope | bean的作用域 |
constructor-arg | 使用构造函数进行依赖注入 |
properties | 类成员变量的依赖注入 |
lazy-init | 延迟加载,表示bean在使用时才会进行实例化,而不是IOC容器创建时就实例化 |
init-method | 指定bean被实例化后,调用的回调函数 |
destroy-method | 指定bean被销毁时,调用的回调函数 |
bean的作用域
定义一个bean时,必须声明bean的作作用域。如果强调每次调用都要重新生成一个bean实例,那么bean的作用域属性scope值为prototype;如果bean在系统中是单例的,那么scope属性值为singleton。
Spring框架支持的作用域:
作用域 | 描述 |
---|---|
singleton | bean在容器中只有一个单一实例【默认】;Spring容器会在创建时就返回一个该对象的实例。 |
prototype | 每次使用bean都会实例化一个新对象; |
1 | <!-- bean时单例的,而且在IOC容器创建时就会实例化一个bean --> |
bean的生命周期
为了定义和拆卸一个bean,需要声明bean的init-method/destroy-method
- init-method:在实例化bean时,立即调用该方法
- destroy-method:bean对象从容器中移除之后,调用该方法
Bean:
1 | package com.xiaopeng.ioc.backup; |
applicationContext.xml配置:
1 | <?xml version="1.0" encoding="UTF-8"?> |
测试init-method/destroy-method:
1 | package com.xiaopeng.ioc.backup; |
输出:
1 | 构造函数被调用 |
可以发现:在默认情况下(scope=“singleton”),单例的对象先被创建,然后创建IOC容器,并且init-method(init())和destroy-method(destroy())都被正确调用。
Spring依赖注入
java对象内部通常会有其他对象(基本类型,引用类型),Spring中,如何给对象的成员变量赋值呢?
- 通过构造函数
- 通过set方法进行赋值
- 注解
通过构造函数进行依赖注入
上面在讲解初始化方法时,Boy类的实例化就是通过构造函数进行依赖注入message的:
1 | <bean id="boy" class="com.xiaopeng.ioc.backup.Boy" init-method="init" destroy-method="destroy"> |
写法 | 描述 |
---|---|
constructor-arg index=”0” ref=”message” | Boy类的构造函数的第一个参数注入message对应的bean对象 |
constructor-arg index=”0” value=”Hello World” | Boy类的构造函数的第一个参数注入字符串Hello World |
constructor-arg type=”java.lang.String” ref=”message” | Boy类的构造函数中String类型形参注入message对应的bean对象 |
constructor-arg type=”java.lang.String” value=”Hello World” | Boy类的构造函数中String类型形参注入字符串Hello World |
使用注解简化IOC配置
通过注解的方式,将对象加入IOC容器,可以和xml配置的方式同时使用,达到简化配置的作用。
注解 | 功能 |
---|---|
@Component | 把一个对象加入Spring-IOC容器 |
@Resource | 属性注入 |
1 | package com.xiaopeng.annotation; |
在appliacationontext.xml中开启注解扫描:
1 | <!-- 开启注解扫描 --> |
本文链接: http://www.xiaopeng.pro/articles/bd1e1c08.html
版权声明: 本原创文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!