(6)bean的概述

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());

    }
}

测试结果如下:


bean实例化测试结果.png

你可能感兴趣的:((6)bean的概述)