spring学习笔记2--Bean的初始化(实例化)、作用域

来源:互联网 发布:ubuntu开机系统还原 编辑:程序博客网 时间:2024/05/16 09:31


前言:自己在复习spring相关知识,特此记录,欢迎大家交流指正-----QQ:767872620

<!-- id是不能为特殊字符的,name可以有特殊字符,没有特殊字符是最好用id ,id默认首字母小写-->
一、三种实例化bean方式

 <!--1.使用类构造器实现  --> <bean id="personService" class="cn.itcast.service.imp.PersonServiceBean" init-method="init" destroy-method="destroy"></bean>import cn.itcast.service.PersonService;

 

/** * 抽取接口实现的 * 右击-》Refactor-》Extract interface * @author Mars * */public class PersonServiceBean implements PersonService {  /**  * bean中的init-method属性指定在实例初始化后执行的初始化方法。  * 一般用于数据库连接的打开等  */ public void init(){  System.out.println("执行了初始化方法"); } /**  * bean中的destory属性指定的在关闭容器前执行的销毁方法。  * 一般用于销毁资源:关闭数据库连接等  */ public void destroy(){  System.out.println("执行了销毁方法"); } public  PersonServiceBean(){  System.out.println("我被实例化了"); } public void save(){  System.out.println("我是save方法"); }}
<!--2.使用静态工厂类实现  --> <bean id="personService2" class="cn.itcast.service.imp.PersonServiceBeanFactory" factory-method="createPersonServiceBean"></bean>

 

/**  * 静态工厂类实现  * @author Mars  *  */public class PersonServiceBeanFactory {     public static PersonServiceBean createPersonServiceBean(){          return new PersonServiceBean();      }  }  
 <!--3.使用实例工厂类实现  --> <bean id="PersonServiceBeanFactory2" class="cn.itcast.service.imp.PersonServiceBeanFactory2"></bean> <bean id="personService3" factory-bean="PersonServiceBeanFactory2" factory-method="createPersonServiceBean"></bean>
 /** * 实例工厂类实现 * @author Mars * */public class PersonServiceBeanFactory2 {public  PersonServiceBean createPersonServiceBean(){return new PersonServiceBean();}}


二、Bean的作用域

1.singleton(默认)单例在每个spring的IOC容器中一个bean定义只有只有一个对象实例。lazy-init延迟初始化:默认情况下会在容器启动时初始化Bean,但是我们可以指定bean节点中的的lazy-init=“true”来延迟初始化。这时候只有第一次获取bean时才会被初始化bean。

如:<bean id="personService" class="cn.itcast.service.imp.PersonServiceBean" lazy-init ="true" ></bean>

default-lazy-init延迟初始化:如果想对所有的bean都应用延迟初始化,可以在根节点beans设置default-lazy-init="true"

如:<beans default-lazy-init="true" xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd"></beans>

2.bean节点的scope属性指定bean的作用域(1)prototype(破除单例魔咒)每次从容器获取bean都是新的对象

(2)request

(3)session

(4)global session

小结:

1.默认为初始化为单例模式:在只有id,class时,在IOC容器中初始化为单例模式

2.多例:在配置文件添加scpoe=“prototype”时,在调用getBean("BeanName")时初始化

3.当单例模式下,在bean的节点添加lazy-init=“true”则在初始化IOC容器时不进行初始化(实例化),只有对第一个bean有效时初始化,在beans节点有添加default-lazy-init=“true”时可以对所有的bean节点有效。延迟加载bean在调用(运行期)进行初始化。

4.init-method:bean节点中的init-method属性是指定“初始化方法”(方法名),在实例化后(调用构造方法后)执行的指定的“初始化方法”。一般用于数据连接的初始化

5.destroy-method:bean节点中的idestroy-method属性是指定“销毁方法”(方法名),在关闭容器之前执行此“销毁方法”。

6.如果没有人为关闭容器,bean一直存在于容器中,可以通过AbstractApplicationContext中的close()手动关闭容器,“销毁方法”在关闭容器前执行。 /*通过AbstractApplicationContext抽象类实现,验证销毁方法*/
  AbstractApplicationContext cxt = new ClassPathXmlApplicationContext("applicationContext.xml");
  cxt.close();
快捷键:抽取接口:右击->Refactor->Extract Interface

 

原创粉丝点击