Spring管理Bean的三种方式

一、Spring对Bean管理的三种方式

1.基于XML实例化配置Bean
  • 基于构造方法实例化对象
  • 基于静态工厂实例化对象
  • 基于工厂实例方法实例化对象
2.基于注解实例化配置Bean

基于注解配置IOC容器

3.基于Java代码实例化配置Bean(Java Config)

基于Java Config配置IOC容器

二、基于XML对Bean进行配置

1.默认构造方法实例化对象
    <!--  bean标签通过默认构造方法创建对象  -->
    <bean id="apple1" class="com.learn.spring.ioc.entity.Apple"></bean>
    public static void main(String[] args) {
        // 初始化IOC容器并实例化对象
        ApplicationContext context = new
                ClassPathXmlApplicationContext
                ("classpath:applicationContext-initIOC.xml");
    }
2.有参构造方法实例化对象
   <bean id="sweetApple" class="com.learn.spring.ioc.entity.Apple">
        <constructor-arg name="title" value="红富士"/>
        <constructor-arg name="origin" value="欧洲"/>
        <constructor-arg name="color" value="红色"/>
        <constructor-arg name="price" value="9.8"/>
    </bean>
3.构造方法参数位置实例化对象
<bean id="sweetApple" class="com.learn.spring.ioc.entity.Apple">
    <constructor-arg index="0" value="红富士"/>
    <constructor-arg index="1" value="欧洲"/>
    <constructor-arg index="2" value="红色"/>
    <constructor-arg index="3" value="9.8"/>
</bean>
4.基于静态工厂实例化对象
<!--  利用静态工厂获取对象  -->
<bean id="apple4" class="com.learn.spring.ioc.factory.AppleStaticFactory" factory-method="createSweetApple" />

package com.learn.spring.ioc.factory;

import com.learn.spring.ioc.entity.Apple;


/* 静态工厂通过静态方法创建对象,隐藏创建对象的细节 */

public class AppleStaticFactory {

    public static Apple createSweetApple(){
        Apple apple = new Apple();
        apple.setTitle("红富士");
        apple.setOrigin("欧洲");
        apple.setColor("红色");
        return apple;
    }
}
5.基于工厂实例方法实例化对象

工厂实例方法创建对象是指IOC容器对工厂类进行实例化并调用对应的实例方法创建对象的过程

<!--  利用工厂实例方法获取对象 -->
    <bean id="factoryInstance" class="com.learn.spring.ioc.factory.AppleFactoryInstance"/>
    <bean id="apple5" factory-bean="factoryInstance" factory-method="createSweetApple"/>

package com.learn.spring.ioc.factory;

import com.learn.spring.ioc.entity.Apple;

 /* 工厂实例方法创建对象是指IOC容器对工厂类进行实例化并调用对应的实例方法创建对象的过程 */

public class AppleFactoryInstance {
    public Apple createSweetApple(){
        Apple apple = new Apple();
        apple.setTitle("红富士");
        apple.setOrigin("欧洲");
        apple.setColor("红色");
        return apple;
    }
}

三、从IOC容器获取Bean

1. 使用getBean(“beanId”, Bean.class) 【推荐】
Apple sweetApple = context.getBean("sweetApple", Apple.class);
2.使用getBean(“beanId”)
Apple sweetApple = (Apple)context.getBean("sweetApple");
3.id属性与name属性
  • 相同点:

    bean id 与name都是设置对象在IOC容器中的唯一标识

    两者在同一配置文件中都不允许出现重复

    两者允许在多个配置文件中出现重复,新对象覆盖旧对象

  • 不同点

    id要求更为严格,一次只能定义一个对象(推荐)

    name更为宽松,一次允许定义多个对象标识

​ id与name的命名要求有意义,按驼峰命名书写