黑马程序员技术交流社区
标题: 【上海校区】Spring生成bean的三种方式 [打印本页]
作者: wuqiong 时间: 2018-4-10 10:27
标题: 【上海校区】Spring生成bean的三种方式
本帖最后由 wuqiong 于 2018-4-10 10:44 编辑
1. Spring生成bean的三种方式
1.1. 无参构造方法默认调用无参构造方法实例化bean。
编写UserDao接口及实现类UserDaoImpl:
file://C:\Users\Student\Desktop\上海Java3月精品文章\肖凯波\spring生成bean的三种方式\Img\wps4600.tmp.jpg?lastModify=1523327470
在UserDaoImpl添加无参构造方法:
public class UserDaoImpl implements UserDao {
public UserDaoImpl() {
System.out.println("调用了无参构造方法...");
}
@Override
public void save() {
System.out.println("user save...");
}
}把UserDaoImpl配置spring容器中:
<bean id="userDao" class="cn.itcast.dao.impl.UserDaoImpl"></bean>
创建单元测试类TestDI,并编写单元测试方法test1:
file://C:\Users\Student\Desktop\上海Java3月精品文章\肖凯波\spring生成bean的三种方式\Img\wps4601.tmp.jpg?lastModify=1523327470
@Test
public void test1() {
// 创建spring工厂(创建ioc容器)
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) ac.getBean("userDao");
userDao.save();
}测试结果如下:
file://C:\Users\Student\Desktop\上海Java3月精品文章\肖凯波\spring生成bean的三种方式\Img\wps4602.tmp.jpg?lastModify=1523327470
1.2. 静态工厂实例化方式
通过调用工厂类的静态方法来生成bean
编写DeptDao接口
file://C:\Users\Student\Desktop\上海Java3月精品文章\肖凯波\spring生成bean的三种方式\Img\wps4603.tmp.jpg?lastModify=1523327470
package cn.itcast.dao;
public interface DeptDao {
public void save();
}编写DeptDaoImpl实现类
file://C:\Users\Student\Desktop\上海Java3月精品文章\肖凯波\spring生成bean的三种方式\Img\wps4604.tmp.jpg?lastModify=1523327470
public class DeptDaoImpl implements DeptDao{
@Override
public void save() {
System.out.println("持久层:部门保存...");
}
}编写工厂类,在其中创建静态工厂方法
file://C:\Users\Student\Desktop\上海Java3月精品文章\肖凯波\spring生成bean的三种方式\Img\wps4605.tmp.jpg?lastModify=1523327470
public class Factory {
/**
* 静态工厂方法
*/
**public** **static** DeptDao create(){
System.**out**.println("调用了静态工厂方法");
**return** **new** DeptDaoImpl();
}
}编写applicationContext.xml配置文件,采用静态工厂方式配置DeptDaoImpl类
<?xml version=*"1.0"* encoding=*"UTF-8"*?>
<beans xmlns=*"http://www.springframework.org/schema/beans"*
xmlns:xsi=*"http://www.w3.org/2001/XMLSchema-instance"*
xsi:schemaLocation=*"http://www.springframework.org/schema/beans*
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userDao" class="cn.itcast.dao.impl.UserDaoImpl"></bean>
<bean id="deptDao" class="cn.itcast.factory.Factory" factory-method="create"></bean>
</beans>在配置DeptDaoImpl这个bean时,class属性写的不是DeptDaoImpl的全路径名,而是工厂类的全路径名;
factory-method:指定工厂类中静态方法的名字
在TestIOC类中编写测试方法test4
@Test
public void test4(){
//创建Spring工厂(创建IOC容器)
ApplicationContext ac = **new** ClassPathXmlApplicationContext("applicationContext.xml");
DeptDao deptDao = (DeptDao) ac.getBean("deptDao");
deptDao.save();
}测试结果如下:
file://C:\Users\Student\Desktop\上海Java3月精品文章\肖凯波\spring生成bean的三种方式\Img\wps4606.tmp.jpg?lastModify=1523327470
1.3. 实例工厂实例化方式修改Factory工厂类,创建实例工厂方法:
public class Factory {
/**
* 静态工厂方法
*/
/*public static DeptDao create(){
System.out.println("调用了静态工厂方法");
return new DeptDaoImpl();
}*/
/**
* 实例工厂方法
* **@return**
*/
**public** DeptDao create(){
System.**out**.println("调用了实例工厂方法");
**return** **new** DeptDaoImpl();
}
}编写applicationContext.xml,采用实例工厂方式重写配置DeptDaoImpl
<?xml version=*"1.0"* encoding=*"UTF-8"*?>
<beans xmlns=*"http://www.springframework.org/schema/beans"*
xmlns:xsi=*"http://www.w3.org/2001/XMLSchema-instance"*
xsi:schemaLocation=*"http://www.springframework.org/schema/beans*
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userDao" class="cn.itcast.dao.impl.UserDaoImpl"></bean>
<!-- <bean id="deptDao" class="cn.itcast.factory.Factory" factory-method="create"></bean> -->
<!-- 实例工厂方法来实例化 -->
<bean id="factory" class="cn.itcast.factory.Factory"></bean>
<bean id="deptDao" factory-bean="factory" factory-method="create"></bean>
</beans>factory-bean:指定工厂bean的id;
Factory-method:指定工厂bean的实例工厂方法的名字
运行test4测试方法,测试结果如下:
file://C:\Users\Student\Desktop\上海Java3月精品文章\肖凯波\spring生成bean的三种方式\Img\wps4617.tmp.jpg?lastModify=1523327470
作者: Yin灬Yan 时间: 2018-4-10 13:57
我来占层楼啊
作者: wuqiong 时间: 2018-4-10 14:36
谢谢啊!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |