自动装配:只把对象放在IOC容器中,也就是只声明bean,而把对象之间的依赖让IOC容器根据类型【byType】或着名字【byName】来完成自动装配。其中这个名字是指的其中一个bean的id名和对象中属性的名字一样。
byType: 根据类型进行自动装配. 但要求 IOC 容器中只有一个类型对应的 bean, 若有多个则无法完成自动装配.
byName: 若属性名和某一个 bean 的 id 名一致, 即可完成自动装配. 若没有 id 一致的, 则无法完成自动装配
在spring装配的bean中,默认这个bean是单例的,在容器初始化的时候就会创建。
下面是自动装配的代码实例
一 service和dao层
public interface ProvinceDao {
public void say();
}
public class ProvinceDaoImpl implements ProvinceDao {
@Override
public void say() {
System.out.println("ProvinceDaoImpl...say");
}
}
public interface ProvinceService {
public void say();
}
public class ProvinceServiceImpl implements ProvinceService {
private ProvinceDao provinceDao;
public void setProvinceDao(ProvinceDao provinceDao) {
this.provinceDao = provinceDao;
}
@Override
public void say() {
System.out.println("ProviceServiceImpl...say进入");
provinceDao.say();
}
}
二、spring配置文件(根据类型byType)
<?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">
<!-- 自动装配 -->
<!--
byType:根据类型进行装配,但要求IOC容器中只能一个类型与之匹配,如果出现多个,由于IOC窗口不知道装配那个bean而出错!
如下面的配置,在ProvinceServiceImpl根据类型装配ProvinceDaoImpl,由于有provinceDaoImpl和provinceDaoImpl2两个
ProvinceDaoImpl类型,则就出错了。
-->
<bean id="provinceServiceImpl" class="com.dadi.service.impl.ProvinceServiceImpl" autowire="byType"></bean>
<bean id="provinceDaoImpl" class="com.dadi.dao.impl.ProvinceDaoImpl" autowire="byType"></bean>
<!--<bean id="provinceDaoImpl2" class="com.dadi.dao.impl.ProvinceDaoImpl" autowire="byType"></bean>-->
</beans>
测试用例
@Test
public void test(){
ApplicationContext ac =new ClassPathXmlApplicationContext("applicationContext-auto.xml");
ProvinceDao provinceDao = (ProvinceDao) ac.getBean("provinceDaoImpl");
System.out.println(provinceDao.toString());
// byType
ProvinceService provinceService = (ProvinceService) ac.getBean("provinceServiceImpl");
provinceService.say();
System.out.println(provinceService.toString());
}
三、spring配置文件(根据名字byName)
<?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">
<!--
byName:若属性名和某一个 bean 的 id 名一致, 即可完成自动装配. 若没有 id 一致的, 则无法完成自动装配
-->
<bean id="provinceDao" class="com.dadi.dao.impl.ProvinceDaoImpl" autowire="byType"></bean>
<bean id="provinceServiceImpl2" class="com.dadi.service.impl.ProvinceServiceImpl" autowire="byName"></bean>
</beans>
测试用例
@Test
public void test(){
ApplicationContext ac =new ClassPathXmlApplicationContext("applicationContext-auto.xml");
//byName
ProvinceService provinceService = (ProvinceService) ac.getBean("provinceServiceImpl2");
provinceService.say();
System.out.println(provinceService.toString());
}