bean配置:

  1  基础配置:id bean唯一标识,class  bean对应的java类

    <bean id="XXX" class="XXX.XXX"/>

  2  别名配置:通过添加name字段指定别名,别名可以指定多个,多个别名之前可用逗号、分号或者空格隔开

    <bean id="XXX" name="别名" class="XXX.XXX"/>

  3  作用范围配置:通过添加scopep字段指定bean对应的类创建的是单例对象,还是可以创建无数个对象,默认是单例

    ¤  singleton  单例

    ¤  protopyte  非单例

    <bean id="XXX" class="XXX.XXX" scope="singleton"/>

    ¤  适合让容器管理的bean

      ♦  表现层对象

      ♦  业务层对象

      ♦  数据层对象

      ♦  工具对象

    ¤  不适合让容器管理的bean

      ♦  封装实体的域对象

bean实例化:

  1  使用对象的无参构造方法:不管方法是private还是public,IoC容器都能正常调用。使用正常bean配置  注:常用

    <bean id="AAA" class="com.AAA"/>

    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

    AAA aaa = (AAA)ctx.getBean("aaa");

  2  使用静态工厂:bean配置需要修改  注:此方法早期使用比较多

    public class AAAFactory

    {

      public static AAA getAAA()

      {

        return new AAAObj();

      }

    }

    <bean id="AAA" class="com.xxxFactory" factory-method="getXXX"/>  注:factory-method对应工厂类里获取对应对象的方法名

    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

    AAA aaa = (AAA)ctx.getBean("aaa");

  3  使用实例工厂:bean配置需要修改。先实例化工厂,再调用工厂创建对象方法

    public class AAAFactory

    {

      public AAA getAAA()

      {

        return new AAAObj();

      }

    }

    <bean id="factory" class="com.xxxFactory"/>

    <bean id="AAA" factory-method="getXXX" factory-bean="factory"/>

    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

    AAA aaa = (AAA)ctx.getBean("aaa");

  4  使用factoryBean方式实例化。对第三种方式的改良。  注:实用

    public class AAAFactoryBean implements FactoryBean<AAA>

    {

      public AAA getObject() throws Exception

      {

        return new AAAObj();

      }

      public Class<?> getObjectType()

      {

        return AAA.class;

      }

      public boolean isSingleton()

      {

        return false;

      }

    }

    <bean id="AAA" class="com.AAAFactoryBean"/>

    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

    AAA aaa = (AAA)ctx.getBean("aaa");

bean生命周期:控制生命周期的两种方式

  1  通过配置实现

    ¤  在类里面添加一个初始化方法。例如:public void init(){}  添加一个销毁方法。例如:public void destory(){}

    ¤  在bean配置里添加对应属性

      <bean id="AAA" class="com.AAA" init-method="init" destory-method="destory"/>

  2  通过接口实现

    ¤  类继承InitializingBean接口,实现接口的afterPropertiesSet方法

    ¤  类继承DisposableBean接口,实现接口的destory方法

  3  测试时销毁调用方式。真实项目销毁由框架处理

    ¤  修改容器对象  此种方式一般不会用

      ♦  ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

      ♦  然后可以调用ctx.close();

    ¤  注册事件。此种方式不需要调用close方法

      ♦  ctx.registerShutdownHook();