版权声明: https://blog.csdn.net/Song_JiangTao/article/details/81941587
准备:
创建项目,创建dao,service,test包(test下只放一个test类)
一、构造方法
SpringDao.java
package com.nuc.dao;
public interface SpringDao {
public void save(String str,String age);
}
SpringDaoImpl.java
package com.nuc.dao.impl;
import com.nuc.dao.SpringDao;
public class SpringDaoImpl implements SpringDao {
@Override
public void save(String str,String age) {
System.out.println("i come from DaoImpl test:"+str+age);
}
}
SpringService.java
package com.nuc.service;
public interface SpringService {
public void save(String str,String age);
}
SpringServiceImpl.java
package com.nuc.service.impl;
import com.nuc.dao.SpringDao;
import com.nuc.service.SpringService;
public class SpringServiceImpl implements SpringService {
private SpringDao springDa;
public SpringServiceImpl(SpringDao springDa){//构造方法实例化bean
this.springDa = springDa;
}
@Override
public void save(String str,String age) {
springDa.save(str,age);
}
}
SpringTest.java
package com.nuc.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.nuc.service.SpringService;
public class SpringTest {
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
@Test
public void test(){//构造器实例化bean测试
SpringService springService = (SpringService) ac.getBean("Service");
springService.save("sjt","21");
}
}
beans.xml
<?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,传到Service的是参数,而不是属性 -->
<bean id="Service" class="com.nuc.service.impl.SpringServiceImpl">
<constructor-arg name="springDa" ref="Dao"></constructor-arg>
</bean>
<bean id="Dao" class="com.nuc.dao.impl.SpringDaoImpl"></bean>
</beans>
测试结果:
二、setter
在SpringServiceImpl.java中创建属性springDa的setter方法
public void setSpringDa(SpringDao springDa) {//setter实例化 this.springDa = springDa; }
修改beans.xml
<!-- setter实例化bean,传到Service的是属性--> <bean id="Service" class="com.nuc.service.impl.SpringServiceImpl"> <property name="springDa" ref="Dao"></property> </bean> <bean id="Dao" class="com.nuc.dao.impl.SpringDaoImpl"></bean>
新建测试方法
@Test public void test2(){//setter实例化bean测试 SpringServiceImpl springService = (SpringServiceImpl) ac.getBean("Service"); springService.save("ss","21"); }
测试结果:
三、静态工厂
新建FactoryBean.java
package com.nuc.dao;
import com.nuc.dao.impl.SpringDaoImpl;
public class FactoryBean {//静态工厂实例化bean
public static SpringDao creatSpringDao(){
return new SpringDaoImpl();
}
}
修改beans.xml
<bean id="Dao" class="com.nuc.dao.FactoryBean" factory-method="creatSpringDao"></bean>
新建测试方法
public void test3(){//静态工厂
SpringDaoImpl sdi = (SpringDaoImpl) ac.getBean("Dao");
sdi.save("sjj","22");
}
结果
四、实例工厂
在FactoryBean.java中新增方法
public SpringDao creatSpringDao2(){//实例工厂
return new SpringDaoImpl();
}
配置beans.xml
<bean name="factory" class="com.nuc.dao.FactoryBean"></bean>
<bean id="Dao" factory-bean="factory" factory-method="creatSpringDao2"></bean>
测试方法
@Test
public void test4(){//实例工厂
SpringDaoImpl sdi = (SpringDaoImpl) ac.getBean("Dao");
sdi.save("ssss2","21");
}
结果: