Spring自动装配模式三:byType的解析

    技术2022-05-18  16

    Spring自动装配模式三:byType的解析

    如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。如果你不希望这样,那么可以通过设置dependency-check="objects"Spring抛出异常。

    配置文件如下:

            <bean id="homeAddressServiceImpl" class="cn.csdn.service.HomeAddressServiceImpl"

           scope="singleton">

           <property name="address">

               <value>北京海淀上地软件园</value>

           </property>

        </bean>

    <bean id="empServiceImpl" class="cn.csdn.service.EmpServiceImpl"

           scope="singleton" autowire="byType" />

     

    cn.csdn.service.HomeAddressServiceImpl代码

    public class HomeAddressServiceImpl extends AddressServiceImpl {

       

        private String address;

       

        public void setAddress(String address){

           this.address=address;

        }

       

       

       

        public HomeAddressServiceImpl() {

           super();

        }

     

     

     

        public HomeAddressServiceImpl(String address){

           this.address=address;

        }

     

    }

     

    cn.csdn.service.EmpServiceImpl 代码

    package cn.csdn.service;

    public class EmpServiceImpl {

     

        private HomeAddressServiceImpl homeAddressServiceImpl;

     

        public void setHomeAddressServiceImpl(

               HomeAddressServiceImpl homeAddressServiceImpl) {

           this.homeAddressServiceImpl = homeAddressServiceImpl;

        }

     

    }

     

    注意:类型匹配指的是class 中的Employee匹配

        在配置文件中 使用byType类型时,相同类型的实例只能存在一个。 如果存在多个该类型的bean,那么将会抛出异常:       org.springframework.beans.factory.UnsatisfiedDependencyException

    原因是:

    org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [spr.bean.Employee] is defined   并指出不能使用byType方式进行自动装配。

    bytype: 类型相同可以匹配

          父类与子类匹配的方式是:子类自动装载成父类的对象。

          接口与实现类:实现类的对象可以自动装载到接口的对象。否则会出现空指针异常。

     


    最新回复(0)