一.spring框架如何管理组件对象的创建
a).组件对象 如userDAO userDAOImpl userService userServiceImpl
b).工厂创建 <bean id = "userDAO"> class="com.cf.dao.UserDAOImpl"
c).获取组件对象 UserDAO userDAO = (UserDAO)new ClassPathXmlApplicationContext("spring.xml").getBean("UserDAO");
d).工厂原理 Class.forName("com.cf.dao.UserDAOImpl").newInstance();-->即:利用反射机制通过路径获取class文件,调用类中的构造方法进行对象创建
二.通过工厂创建简单对象
简单对象: 可以通过new关键字创建的对象,统一称为简单对象
工厂创建时: <bean id="” class=“”>
三.通过工厂创建复杂对象
复杂对象:不能通过new关键字进行创建对象; 如:接口类型 如Connection、抽象类 Calendar
工厂创建复杂对象:
1.类 implements FactoryBean<Calendar>
import org.springframework.beans.factory.FactoryBean;
import java.util.Calendar;
/**
* User: 晨风
* <p>
* Author:
* Date: 22:24
*/
public class CalendarFactoryBean implements FactoryBean<Calendar> {
// 用来书写复杂对象的创建方式
@Override
public Calendar getObject() throws Exception {
return Calendar.getInstance();
}
// 指定创建的复杂对象的类型
@Override
public Class<?> getObjectType() {
return Calendar.class;
}
// 指定的创建对象的模式 true 单例模式、false多例模式
@Override
public boolean isSingleton() {
return false;
}
}
import org.springframework.beans.factory.FactoryBean;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Calendar;
/**
* User: 晨风
* <p>
* Author:
* Date: 23:17
*/
public class ConnectionFactoryBean implements FactoryBean<Connection> {
@Override
public Connection getObject() throws Exception {
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection("jdbc:mysql://localhost:3306/day35","root", "123456");
}
@Override
public Class<?> getObjectType() {
return Connection.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
2.通过工厂配置创建复杂对象
<bean id="calendar" class="CalendarFactoryBean"></bean>
<bean id="connection" class="ConnectionFactoryBean"></bean>
3.在工厂中获取
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("factorybean.xml");
Calendar calendar = (Calendar) context.getBean("calendar");
System.out.println(calendar.getTime());
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("factorybean.xml");
Connection connection = (Connection) context.getBean("connection");
System.out.println(connection);
总结:复杂对象的创建,只要你知道如何创建复杂对象,你就可以实现FactoryBean接口自定义创建,同时将此类放入工厂,交由spring管理。