zoukankan      html  css  js  c++  java
  • Spring Autowiring by Type

    In Spring, “Autowiring by Type” means, if data type of a bean is compatible with the data type of other bean property, auto wire it.

    For example, a “person” bean exposes a property with data type of “ability” class, Spring will find the bean with same data type of class “ability” and wire it automatically. And if no matching found, just do nothing.

    You can enable this feature via autowire="byType" like below :

    	<!-- person has a property type of class "ability" -->
    	<bean id="person" class="com.mkyong.common.Person" autowire="byType" />
    		
    	<bean id="invisible" class="com.mkyong.common.Ability" >
    		<property name="skill" value="Invisible" />
    	</bean>
    

    See a full example of Spring auto wiring by type.

    1. Beans

    Two beans, person and ability.

    package com.mkyong.common;
     
    public class Person 
    {
    	private Ability ability;
    	//...
    }
    
    package com.mkyong.common;
     
    public class Ability 
    {
    	private String skill;
    	//...
    }
    

    2. Spring Wiring

    Normally, you wire the bean explicitly :

    	<bean id="person" class="com.mkyong.common.Person">
    		<property name="ability" ref="invisible" />
    	</bean>
    	
    	<bean id="invisible" class="com.mkyong.common.Ability" >
    		<property name="skill" value="Invisible" />
    	</bean>
    

    Output

    Person [ability=Ability [skill=Invisible]]
    

    With autowire by type enabled, you can leave the ability property unset. Spring will find the same data type and wire it automatcailly.

    	<bean id="person" class="com.mkyong.common.Person" autowire="byType" />
    	
    	<bean id="invisible" class="com.mkyong.common.Ability" >
    		<property name="skill" value="Invisible" />
    	</bean>
    

    Output

    Person [ability=Ability [skill=Invisible]]
    

    Wait, what if you have two beans with same data type of class “ability”?

    	<bean id="person" class="com.mkyong.common.Person" autowire="byType" />
    	
    	<bean id="steal" class="com.mkyong.common.Ability" >
    		<property name="skill" value="Steal" />
    	</bean>
    	
    	<bean id="invisible" class="com.mkyong.common.Ability" >
    		<property name="skill" value="Invisible" />
    	</bean>
    

    Output

    Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: 
    ...
    No unique bean of type [com.mkyong.common.Ability] is defined: 
    expected single matching bean but found 2: [steal, invisible]; nested exception is 
    org.springframework.beans.factory.NoSuchBeanDefinitionException: 
    No unique bean of type [com.mkyong.common.Ability] is defined: 
    expected single matching bean but found 2: [steal, invisible]
    

    In this case, you will hits the UnsatisfiedDependencyException error message.

    Note
    In autowiring by type mode, you just have to make sure only one unique data type of bean is declared.

  • 相关阅读:
    【神经网络与深度学习】Caffe Model Zoo许多训练好的caffemodel
    【计算机视觉】论文笔记:Ten years of pedestrian detection, what have we learned?
    【计算机视觉】论文笔记:Ten years of pedestrian detection, what have we learned?
    【计算机视觉】行人检测资源汇总
    【计算机视觉】行人检测资源汇总
    【神经网络与深度学习】卷积神经网络(CNN)
    【神经网络与深度学习】卷积神经网络(CNN)
    【CUDA开发】__syncthreads的理解
    【CUDA开发】__syncthreads的理解
    微信公众号-增加智能自动回复的功能--使用图灵机器人
  • 原文地址:https://www.cnblogs.com/ghgyj/p/4749917.html
Copyright © 2011-2022 走看看