一篇Spring带你快速入门

Spring-Bean管理

2019-02-14  本文已影响11人  往事随风_0817

Spring-Bean管理

介绍

ApplicationContext和BeanFactory区别

  1. applicationContext和BeanFactory都是Spring工厂类
  2. applicationContext是BeanFactory一个子接口,applicationContext增强了BeanFactory功能,有国际化等
  3. 两者生成Bean的时机不同
    BeanFactory完成工厂实例化之后,通过getBean方法来创建某个Bean的实例对象,而applicationContext是一加载配置文件,将配置文件中所有单例模式生成的类全部给实例化

FileSystemXmlApplicationContext:从系统某个磁盘位置加载配置文件
ClassPathXmlApplicationContext:从类路径加载配置文件

Bean实例化的三种方式

1. 通过无参构造器创建Bean

/**
 * Bean的实例化的三种方式:采用无参数的构造方法的方式
 */
public class Bean1 {
    public Bean1(){
        System.out.println("Bean1被实例化了...");
    }
}

//XML
<!--第一种:无参构造器的方式-->
<bean id="bean1" class="com.akwangl.demo.Bean1"/>

2.通过静态工厂方式

/**
 * Bean的实例化三种方式:静态工厂实例化方式
 */
public class Bean2 {

}

/**
 * Bean2的静态工厂
 */
public class Bean2Factory {
    public static Bean2 createBean2(){
        System.out.println("Bean2Factory的方法已经执行了...");
        return new Bean2();
    }
}

//XML
<!--第二种:静态工厂的方式-->
<bean id="bean2" class="com.akwangl.demo.Bean2Factory" factory-method="createBean2"/>

3.通过实例工厂方式

/**
 * Bean的实例化三种方式:实例工厂实例化
 */
public class Bean3 {

}

/**
 * Bean3的实例工厂
 */
public class Bean3Factory {
    public Bean3 createBean3(){
        System.out.println("Bean3Factory执行了...");
        return new Bean3();
    }
}

//XML
<!--第三种:实例工厂的方式-->
<bean id="bean3Factory" class="com.imooc.ioc.demo2.Bean3Factory"/>

<bean id="bean3" factory-bean="bean3Factory" factory-method="createBean3"/>

通常无参构造器的方式使用较为广泛,如果实例化复杂关系的Bean可以选择第二种或者第三种

注意:如果使用applicationContext工厂,一旦加载配置文件,会将配置文件中的所有单例模式的Bean全部给实例化了

Bean的配置

id和name的区别

  1. 本质上效果一样,在IOC容器中id必须是唯一的,而name是可以多个相同的(但最好还是写成唯一的)

  2. id不允许编写特殊字符,而name可以编写特殊字符

class

class属性用于代表一个类的完全限定名,主要作用是让IOC容器生成类的实例

Bean的作用域

  1. singleton:singleton代表单例,Spring默认使用单例来创建Bean

  2. prototype:每次Spring都会创建一个新的Bean

  3. request:每次HTTP请求都会创建一个新的Bean

  4. session:同一个HTTP Session共享一个Bean,不同的HTTP Session使用不同的Bean

Spring容器中Bean的生命周期

Spring初始化bean或销毁bean时,有时候需要做一些事情,因此Spring可以在创建和销毁bean的时候调用bean的两个生命周期方法

<bean id="xxx" class="...bean完全限定名" init-method="init" destory-method="destroy"/>

  1. 当bean被载入到容器的时候会调用当前bean下的init方法

  2. 当bean从容器中销毁的时候会调用destroy方法("scope=singleton"才有效)

Spring-Bean的完整生命周期有11个步骤,可自行百度阅读

上一篇 下一篇

猜你喜欢

热点阅读