第一种构造方法(常用):
步骤1:创建接口BookDao
package com.cdcas.dao;
public interface BookDao {
void save();
}
步骤2:创建实现类BookDaoImpl
package com.cdcas.dao.impl;
import com.cdcas.dao.BookDao;
public class BookDaoImpl implements BookDao {
public BookDaoImpl() {
System.out.println("Spring容器通过构造方法实例化BookImpl对象");
}
public void save(){
System.out.println("book dao save...");
}
}
步骤3:在xml文件中配置bean
<bean id="bookDao" class="com.cdcas.dao.impl.BookDaoImpl"/>
步骤4:进行测试
@org.junit.Test
public void test2(){
//获取IoC容器
ApplicationContext appCon=new ClassPathXmlApplicationContext("applicationContext.xml");
//通过构造方法获取bean
BookDao bookDao=(BookDao) appCon.getBean("bookDao");
}
结果
第二种静态工厂(了解):
步骤1:创建OrderDao接口
package com.cdcas.dao;
public interface OrderDao {
void save();
}
步骤2:创建OrderDaoImpl实现类
package com.cdcas.dao.impl;
import com.cdcas.dao.OrderDao;
public class OrderDaoImpl implements OrderDao {
@Override
public void save() {
System.out.println("Spring容器通过静态工厂实例化OderDaoImpl对象");
}
}
步骤3:在xml文件中配置bean
<bean id="orderDao" class="com.cdcas.factory.OrderDaoFactory" factory-method="getOrderDao"/>
步骤4:进行测试
@org.junit.Test
public void test3(){
//获取IoC容器
ApplicationContext appCon=new ClassPathXmlApplicationContext("applicationContext.xml");
//通过静态工厂获取bean
OrderDao orderDao=(OrderDao) appCon.getBean("orderDao");
orderDao.save();
}
结果
第三种实例工厂(了解)
步骤1:创建UserDao接口
package com.cdcas.dao;
public interface UserDao {
void save();
}
步骤2:创建UserDaoImpl实现类
package com.cdcas.dao.impl;
import com.cdcas.dao.UserDao;
public class UserDaoImpl implements UserDao {
@Override
public void save() {
System.out.println("Spring容器通过实例工厂实例化UserDaoImpl对象");
}
}
步骤3:创建实例工厂UserDaoFactory
package com.cdcas.factory;
import com.cdcas.dao.UserDao;
import com.cdcas.dao.impl.UserDaoImpl;
public class UserDaoFactory {
private static final UserDao userDao=new UserDaoImpl();
public UserDao getUserDao(){
return userDao;
}
}
步骤4:配置xml
<!--实例工厂-->
<bean id="userFactory" class="com.cdcas.factory.UserDaoFactory"/>
<bean id="userDao" factory-method="getUserDao" factory-bean="userFactory"/>
步骤5:测试
// 实例工厂实例对象
@org.junit.Test
public void test4(){
//获取IoC容器
ApplicationContext appCon=new ClassPathXmlApplicationContext("applicationContext.xml");
//通过静态工厂获取bean
UserDao userDao=(UserDao) appCon.getBean("userDao");
userDao.save();
}
结果:
第四种方法实现FactoryBean接口:
通过观察实例化工厂的xml配置:
<!--实例工厂-->
<bean id="userFactory" class="com.cdcas.factory.UserDaoFactory"/>
<bean id="userDao" factory-method="getUserDao" factory-bean="userFactory"/>
我们可以发现,只有实例化一个工厂对象才能调工厂中的方法从而获取UserDao的实例。这样很麻烦,所以Spring
提供了FactoryBean接口来解决这一麻烦。下面是实现过程:
步骤1:创建UserDaoFactoryBean实现类实现FactoryBean接口
import com.cdcas.dao.UserDao;
import com.cdcas.dao.impl.UserDaoImpl;
import org.springframework.beans.factory.FactoryBean;
public class UserDaoFactoryBean implements FactoryBean {
private static UserDao userDao=new UserDaoImpl();
//代替原始实例工厂中创建对象的方法
@Override
public Object getObject() throws Exception {
return userDao;
}
@Override
public Class<?> getObjectType() {
return UserDao.class;
}
}
步骤2xml:
<!--使用FactoryBean实例化bean-->
<bean id="userDao2" class="com.cdcas.factory.UserDaoFactoryBean"/>
步骤3:
// 实例FactoryBean实例对象
@org.junit.Test
public void test5(){
//获取IoC容器
ApplicationContext appCon=new ClassPathXmlApplicationContext("applicationContext.xml");
//通过静态工厂获取bean
UserDao userDao=(UserDao) appCon.getBean("userDao2");
userDao.save();
}
结果: