Spring IoC容器管理一个或多个bean。这些bean是使用您提供给容器的配置元数据创建的,例如,以XML
在容器本身内,这些bean定义表示为BeanDefinition 对象,其中包含以下元数据(以及其他信息):
包限定的类名
:通常是正在定义的bean的实际实现类
。- Bean
行为配置元素
,说明bean在容器中的行为方式(范围,生命周期回调
等)。引用bean执行其工作所需的其他bean
; 这些引用也称为协作者或依赖项
。- 要在新创建的对象中设置的
其他属性设置
,例如,在管理连接池的Bean中使用的连接数,或池的大小限制。
此元数据转换为组成每个bean定义的一组属性。
bean的定义如下
Property | 说明 |
---|---|
class | 实例化的类名 |
name | bean的名称 |
scope | bean的作用域 |
constructor arguments | 构造参数 |
properties | 属性 |
autowiring mode | 装配模式 |
lazy-initialization mode | 懒加载模式 |
initialization method | 初始化的回调方法 |
destruction method | 销毁的回调方法 |
1.bean的命名
-
命名约定
惯例是在命名bean时使用标准Java约定作为实例字段名称。也就是说,bean名称以小写字母开头,遵循驼峰式的命名规则,比如'accountManager', 'accountService','userDao','loginController',等等
+别名
在bean定义之外别名bean ,别名不能与现有bean的名称冲突,也就是bean的名称和别名都要是唯一性,实际上别名在实际spring中的源码中是以map的形式来存储的,key为别名,value为对应的bean的名称
,这样就可以通过别名找到实际bean的名称从IOC容器找到对应bean
2.实例化bean
目前bean的实例化有三种方式可以做到,重用也就是无参构造函数实例化最多
构造函数实例化
静态方法实例化
工厂方法实例化
下面通过例子来演示:
/**
* @Project: spring
* @description: 通过构造函数实例化
* @author: sunkang
* @create: 2018-09-11 20:07
* @ModificationHistory who when What
**/
public class ConstructMethod {
public String disPlay(){
return "我是构造函数";
}
}
静态实例化,需要提供一个静态方法来创建实例
/**
* @Project: spring
* @description: 通过静态方法实例化
* @author: sunkang
* @create: 2018-09-11 19:45
* @ModificationHistory who when What
**/
public class StaticFactoryMethod {
private static StaticFactoryMethod staticMethodFactory = new StaticFactoryMethod();
private StaticFactoryMethod() {}
public static StaticFactoryMethod createInstance() {
return staticMethodFactory;
}
public String disPlay(){
return "我是静态工厂方法";
}
}
通过工厂方法实例化,需要先产生一个工厂,才能生产对象,也就是需要配置factory-bean和factory-method属性
/**
* @Project: spring
* @description: 通过工厂方法实例化
* 需要先实例一个工厂对象出来,才能创建去创建bean对象
* @author: sunkang
* @create: 2018-09-11 19:57
* @ModificationHistory who when What
**/
public class FactoryMethod {
private static FactoryMethod INSTANCE = new FactoryMethod();
public FactoryMethod createInstance(){
return INSTANCE;
}
public String disPlay(){
return "我是工厂方法";
}
}
接下来bean的配置文件spring-initialize.xml的配置
接下来是具体的测试方法
/**
* @Project: spring
* @description: bean 初始化的三种方式的测试和别名的测试
* @author: sunkang
* @create: 2018-09-11 19:50
* @ModificationHistory who when What
**/
public class BeansTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beanInitialze/spring-initialize.xml");
//静态工厂方法实例化测试
StaticFactoryMethod staticMethodFactory = context.getBean("staticFactoryInitialize",StaticFactoryMethod.class);
System.out.println("静态工厂方法:"+staticMethodFactory.disPlay());
//工厂方法实例化测试
FactoryMethod factoryMethod = context.getBean("factoryMethodInitialize",FactoryMethod.class);
System.out.println("工厂方法:"+ factoryMethod.disPlay());
//构造函数实例化测试
ConstructMethod constructMethod = context.getBean("constructInitialize",ConstructMethod.class);
System.out.println("构造测试:"+constructMethod.disPlay());
//别名
ConstructMethod alias = context.getBean("constructAlias1",ConstructMethod.class);
System.out.println("别名测试:"+alias.disPlay());
}
}
测试结果如下: