1:Bean实例化的三种方式:
首先提到一点。只要在配置文件中正确配置的<bean>在通过配置文件生成工厂时就创建了相应的实例。在Spring容器中等待调用。
使用无参构造的方式:也就是在配置文件中配置:
<bean id="aaa" class="xxx.xxx.xxxx"></bean>
class指向的是一个类的全路径类名。该类必须有无参构造器。然后使用Spring工厂类对象调用getBean(id值)方法就可获得实例对象
使用静态工厂的方式:配置文件中配置:
<bean id="aaa" class="xxx.xxx.xxxFactory" factory-method="xxx"></bean>
class指向的是一个工厂类,该类中有创建目标类的静态方法,factory-method就指向了这个方法名。其核心思想是:工厂类实现创建目标类的方法,Spring只负责调用该静态方法。存入Spring容器中的以及getBean(id值)获得的都是由静态方法所创建的实例。
使用实例工厂的方式:配置文件中配置:
<bean id="xxxFactory" class="xxx.xxx.xxxxFactory"></bean>
<bean id="xxx" factory-bean="xxxFactory" factory-method="xxx"></bean>
第一个bean配置工厂类,class指向工厂全路径类名。第二个bean指定目标类,factory-bean为工厂bean的id,factory-method为工厂类中创建目标类对象的普通方法。
实例工厂方式与静态工厂方式区别就在于创建目标类的方法是否为静态。配置稍有不同。
2.Bean的配置
id和name:id中不能包含特殊字符,有的话使用name。
class:设置类的全路径类名,用于指定类。
默认为singleton。
3.Bean的初始化方法和销毁方法
在Spring初始化Bean和销毁Bean的时候,有时需要做些处理工作。可以配置两个属性来指定。
<bean id="xxx" class="xxx.xxx.xxxx" init-method="xxx" destroy-method="xxx"></bean>
init-method指定目标类中的一个方法,该方法做初始化时的工作。destroy-method指定目标类中的一个方法,该方法做销毁时的工作。初始化在创建工厂时就执行了。而销毁可以调用ClassPathXmlApplicationContext的close()方法来强制销毁。
需要指出,只有bean的scope为singleton时,才能指定销毁方法。