Spring IOC&DI 自动装配

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010285684/article/details/80237816

自动装配:只把对象放在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());
	}



猜你喜欢

转载自blog.csdn.net/u010285684/article/details/80237816