目录
Bean的初始化和销毁方法配置
Bean的初始化和销毁方法配置
扩展
Bean的实例化
Bean的初始化和销毁方法配置
当lazy-init设置为true时为延迟加载,也就是当Spring容器加载的时候,不会立即创建Bean实例,等待用到时再创建Bean实例并存储到单例池中,后续在使用Bean直接从单例池获取即可,本质上Bean还是单例的
<bean id="userDao" name="dao" class="com.xfy.dao.Impl.UserDaoImpl" lazy-init="true" ></bean>
Bean的初始化和销毁方法配置
Bean在被实例化后,可以执行指定的初始化方法完成一些初始化的操作,Bean在销毁之前也可以执行指定的销毁方法完成一些操作
<bean id="userDao" name="dao" class="com.xfy.dao.Impl.UserDaoImpl" lazy-init="true" init-method="init" destroy-method="destroy" ></bean>
public class UserDaoImpl implements UserDao{
public UserDaoImpl() {
System.out.println("UserDaoImpl无参方法执行");
}
public void init(){
System.out.println("初始化完成");
}
public void destroy(){
System.out.println("快销毁了");
}
public void run() {
System.out.println("run》》》》》》");
}
}
扩展
除此之外,我们还可以通过实现InitializingBean接口,完成一些Bean初始化操作
package com.xfy.dao.Impl;
import com.xfy.dao.UserDao;
import org.springframework.beans.factory.InitializingBean;
public class UserDaoImpl implements UserDao,InitializingBean{
public UserDaoImpl() {
System.out.println("UserDaoImpl无参方法执行");
}
public void init(){
System.out.println("初始化完成");
}
public void destroy(){
System.out.println("快销毁了");
}
public void run() {
System.out.println("run》》》》》》");
}
//在属性设置之后
public void afterPropertiesSet() throws Exception {
System.out.println("afterPropertiesSet.....");
}
}
Bean的实例化
<bean id="userDao" name="dao" class="com.xfy.dao.Impl.UserDaoImpl" lazy-init="true" >
<!-- 构造参数-->
<constructor-arg name="name" value="xfy"></constructor-arg>
</bean>
//有参构造方法
public UserDaoImpl(String name) {
System.out.println("UserDaoImpl无参方法执行");
}
//默认为无参构造方法
工厂方法实例化:底层通过调用自定义的工厂方法对Bean进行实例化
-
静态工厂方法实例化Bean
<bean id="userDao1" class="com.xfy.factory.MyBeanFactory1" factory-method="userDao"></bean>
package com.xfy.factory;
import com.xfy.dao.Impl.UserDaoImpl;
import com.xfy.dao.UserDao;
public class MyBeanFactory1 {
public static UserDao userDao(){
// Bean创建之前可以进行一些其它操作
return new UserDaoImpl();
}
}
有参:
<bean id="userDao1" class="com.xfy.factory.MyBeanFactory1" factory-method="userDao">
<constructor-arg name="name" value="xfy"></constructor-arg>
</bean>
实例工厂方法实例化Bean
package com.xfy.factory;
import com.xfy.dao.Impl.UserDaoImpl;
import com.xfy.dao.UserDao;
//实例化工厂方法
//与静态工厂方法不同的是实例化工厂调用方法的前提是要有一个实例化的对象,调用非静态方法
public class MyBeanFactory2 {
public UserDao userDao(){
// Bean创建之前可以进行一些其它操作
return new UserDaoImpl();
}
}
<!-- 实例化一个对象-->
<bean class="com.xfy.factory.MyBeanFactory2" id="beanFactory2"></bean>
<!-- 实现实例化工厂-->
<bean id="userDao2" factory-bean="beanFactory2" factory-method="userDao"></bean>