黑马程序员技术交流社区

标题: 【上海校区】Spring生成bean的三种方式 [打印本页]

作者: 小影姐姐    时间: 2018-4-18 11:06
标题: 【上海校区】Spring生成bean的三种方式
1. Spring生成bean的三种方式
1.1. 无参构造方法
默认调用无参构造方法实例化bean。
编写UserDao接口及实现类UserDaoImpl:
在UserDaoImpl添加无参构造方法:
[AppleScript] 纯文本查看 复制代码
public class UserDaoImpl implements UserDao {public UserDaoImpl() { System.out.println("调用了无参构造方法...");}@Overridepublic void save() { System.out.println("user save...");}}
把UserDaoImpl配置spring容器中:
[AppleScript] 纯文本查看 复制代码
<bean id="userDao" class="cn.itcast.dao.impl.UserDaoImpl"></bean>
创建单元测试类TestDI,并编写单元测试方法test1:
[AppleScript] 纯文本查看 复制代码
@Testpublic void test1() { // 创建spring工厂(创建ioc容器) ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) ac.getBean("userDao"); userDao.save();}
测试结果如下:
1.2. 静态工厂实例化方式
通过调用工厂类的静态方法来生成bean
编写DeptDao接口
[AppleScript] 纯文本查看 复制代码
package cn.itcast.dao;public interface DeptDao {public void save();}
编写DeptDaoImpl实现类
[AppleScript] 纯文本查看 复制代码
public class DeptDaoImpl implements DeptDao{@Overridepublic void save() { System.out.println("持久层:部门保存...");}}
编写工厂类,在其中创建静态工厂方法
[AppleScript] 纯文本查看 复制代码
public class Factory {/** * 静态工厂方法 */**public** **static** DeptDao create(){ System.**out**.println("调用了静态工厂方法"); **return** **new** DeptDaoImpl();}}
编写applicationContext.xml配置文件,采用静态工厂方式配置DeptDaoImpl类
[AppleScript] 纯文本查看 复制代码
<?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
[AppleScript] 纯文本查看 复制代码
@Testpublic void test4(){ //创建Spring工厂(创建IOC容器) ApplicationContext ac = **new** ClassPathXmlApplicationContext("applicationContext.xml"); DeptDao deptDao = (DeptDao) ac.getBean("deptDao"); deptDao.save();}
测试结果如下:
1.3. 实例工厂实例化方式
修改Factory工厂类,创建实例工厂方法:
[AppleScript] 纯文本查看 复制代码
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
[AppleScript] 纯文本查看 复制代码
<?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测试方法,测试结果如下:






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2