Bean概述
Spring IoC容器的目的就是管理Bean,Bean根据配置文件中的定义创建。在容器内,Bean的定义用BeanDefinition
对象表示,定义主要包含以下信息:
- 全限定类名
- Bean的行为:作用域(单例,原型),惰性初始化,生命周期等。
- Bean创建方式:通过构造器还是工厂创建Bena
- Bean之间的关系定义:依赖关系定义,即对其他Bean的引用。
1、xml配置文件
<!--配置文件模板-->
<?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">
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
</beans>
2、Bean命名
在XML中使用id
或者name
属性来指定标识符。id是唯一的,如果使用了name属性则视作别名,name属性也可以指定多个名称,用逗号分隔。如果没有指定任何标识符,Spring会自动生成一个唯一的标识符。
<bean id="..." name="..." />
alias指定别名
除了直接在属性中指定之外,还可以使用<alias></alias>
标签来定义别名。
<alias name="UserBean" alias="systemA-UserBean" />
<alias name="UserBean" alias="systemB-UserBean" />
<!--
这种方式通常在大型系统中使用,主要目的是在每个子系统之间分配,让每个子系统拥有自己的一组对象定义。
-->
3、实例化bean
基于构造器实例化bean
1、空构造器,指定的类必须存在无参构造
<bean id="UserBean" class="com.project.bean" />
<bean name="UserBean" class="com.project.bean" />
2、带参的构造器
注意索引下标是从0开始
<!--
index:参数的位置,从0开始
value:常量值
如果参数是一个引用则使用`ref`
<constructor-arg ref = “baz” />
-->
<bean id="userbean" class="com.project.bean.UserBean">
<constructor-arg index="0" value="李刚"/>
</bean>
基于静态工厂实例化
使用静态工厂,class需要指定工厂类,和factory-method属性指定方法,同时静态工厂也可以指定参数。
//静态工程类
public class StaticFactory {
public static UserBean newInstance(String name) {
return new UserBean(name);
}
}
<!-- 使用静态工厂方法 -->
<bean id="userbean" class="com.project.util.StaticFactory" factory-method="newInstance">
<constructor-arg index="0" value="Hello Spring!"/>
</bean>
基于实例工厂实例化
普通工厂的使用基本相同,class
属性换成factory-bean
(不是指定类了,是指定容器中bean的名称 )。
<!-- 先定义实例工厂bean -->
<bean id="InsFactory" class="com.project.util.InsFactory"></bean>
<!-- 使用实例化工厂类 -->
<bean id="userbean3" factory-bean="InsFactory" factory-method="newInstance">
<constructor-arg index="0" value="Hello Spring!"/>
</bean>