A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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("持久层:部门保存...");}}
[color=#363636][font=&quot;][size=14px]
编写工厂类,在其中创建静态工厂方法
[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* [url=http://www.springframework.org/schema/beans/spring-beans.xsd]http://www.springframework.org/schema/beans/spring-beans.xsd[/url]"> <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* [url=http://www.springframework.org/schema/beans/spring-beans.xsd]http://www.springframework.org/schema/beans/spring-beans.xsd[/url]"> <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测试方法,测试结果如下:

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马