1. scope属性
xml配置文件中的bean:
<bean id="userDao" class="com.guazi.Dao.impl.UserDaoImpl" scope="singleton"></bean>
java代码
public class UserServiceImpl implements UserService {
public static void main(String[] args){
// 加载xml配置文件
ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
// 通过id标识获取类
UserDao userDao1 = (UserDao) app.getBean("userDao");
UserDao userDao2 = (UserDao) app.getBean("userDao");
// 实现类方法
System.out.println(userDao1);
System.out.println(userDao2);
}
}
结果:
com.guazi.Dao.impl.UserDaoImpl@77a57272
com.guazi.Dao.impl.UserDaoImpl@77a57272
xml配置文件中的bean:
<bean id="userDao" class="com.guazi.Dao.impl.UserDaoImpl" scope="prototype"></bean>
java代码同上
结果:
com.guazi.Dao.impl.UserDaoImpl@70a9f84e
com.guazi.Dao.impl.UserDaoImpl@130f889
2. initial-method属性和destroy-method属性
指定类创建时就执行的方法;指定类销毁时就执行的方法
3. bean实例化的三种方法
- 无参构造方法实例化(默认)
调用无参构造方法进行实例化
- 工厂静态方法实例化
要先创建一个工厂
StaticFactory.java
package com.guazi.factory;
import com.guazi.Dao.UserDao;
import com.guazi.Dao.impl.UserDaoImpl;
public class StaticFactory {
public static UserDao getUserDao(){
return new UserDaoImpl();
}
}
xml配置文件中的bean,类名改为工厂的名,然后再配上factory-method参数,由于是静态的构造方法,spring会直接去找factory-method中的方法构造类:
<bean id="userDao" class="com.guazi.factory.StaticFactory" factory-method="getUserDao"></bean>
- 工厂动态方法实例化
DynamicFactory.java
package com.guazi.factory;
import com.guazi.Dao.UserDao;
import com.guazi.Dao.impl.UserDaoImpl;
public class DynamicFactory {
public UserDao getUserDao(){
return new UserDaoImpl();
}
}
由于没有了static,在xml中需要先创建工厂的对象,然后再创建UserDao的对象:
<bean id="DynamicFactory" class="com.guazi.factory.DynamicFactory"></bean>
<bean id="userDao" factory-bean="DynamicFactory" factory-method="getUserDao"></bean>