スプリング自動アセンブリ(13)

public class Customer 
{
	private Address address;
}
public class Address 
{
	private String fulladdress;
}

REFによって指定1.デフォルトのアセンブリ、

<bean id="customer" class="org.qww.common.Customer">
        <property name="person" ref="person" />
</bean>
	<bean id="person" class="org.qww.common.Person" />

この設定方法は、デフォルト値です。

2.アセンブリ名、BYNAME

<bean id="customer" class="org.qww.Customer" autowire="byName" />
<bean id="address" class="org.qww.common.Address" >
	<property name="fulladdress" value="YiLong Road, CA 188" /> 
</bean>

顧客の属性名と同じアドレスは、アドレスの意志豆注射として、住所が同じ名前でないときに注入することができない、以下のとおりです。

<bean id="customer" class="org.qww.common.Customer" autowire="byName" />
<bean id="addressABC" class="org.qww.common.Address" >
		<property name="fulladdress" value="Block A 888, CA" />
</bean>

お客様は、出力は次のようになります。

Customer [address=null]

タイプ3.注射、byType

<bean id="customer" class="org.qww.Customer" autowire="byType" />
<bean id="address11" class="org.qww.common.Address" >
	<property name="fulladdress" value="YiLong Road, CA 188" /> 
</bean>

タイプとaddress11ます注入型に注入することにより、同じアドレスで豆address11カスタマーアドレスの種類、お客様の出力は次のようになります。

Customer [address=Address [fulladdress=YiLong Road, CA 188]]

場合は、コンテナ例外がスローされます自動設定の種類によってアドレスBeanの2種類があります。

<bean id="customer" class="org.qww.Customer" autowire="byType" />
<bean id="address11" class="org.qww.common.Address" >
	<property name="fulladdress" value="YiLong Road, CA 188" /> 
</bean>
<bean id="address12" class="org.qww.common.Address" >
	<property name="fulladdress" value="YiLong Road, CA 188" /> 
</bean>

初期化コンテナは、次の例外がスローされます。

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

コンストラクタ・インジェクションすることにより、だけでなく、噴射式によって4、コンストラクタ

次のようにデフォルトコンストラクタは、注入されたBeanを呼び出します。

public class SpringHelloWord {
	private Hello hello;
	private String say;
	private Hello2 hello2;
	public String getSay() {
		return say;
	}
	public void setSay(String say) {
		this.say = say;
	}
	public SpringHelloWord() {
		System.out.println("1");
	}
	public SpringHelloWord(Hello hello) {
		this.hello=hello;
		System.out.println("2");
	}
	public SpringHelloWord(Hello hello,String say) {
		this.hello=hello;
		this.say=say;
		System.out.println("3");
	}
	public SpringHelloWord(Hello hello,Hello2 hello2) {
		this.hello=hello;
		this.hello2=hello2;
		System.out.println("4");
	}
	public void say() {
		System.out.println("Spring Hello Word");
	}
	public Hello getHello() {
		return hello;
	}
	public void setHello(Hello hello) {
		this.hello = hello;
	}
	public Hello2 getHello2() {
		return hello2;
	}
	public void setHello2(Hello2 hello2) {
		this.hello2 = hello2;
	}
}

次のようにすると設定は次のとおりです。

	<bean id="helloBean" class="Spring.SpringHelloWord" autowire="constructor">
	</bean>
	<bean id="hello" class="Spring.Hello">
	</bean>

helloBean、出力2を取得する場合、コールはSpringHelloWord(ハローハロー)コンストラクタです。

次のようにすると設定は次のとおりです。

	<bean id="helloBean" class="Spring.SpringHelloWord" autowire="constructor">
	</bean>
	<bean id="hello" class="Spring.Hello">
	</bean>
	<bean id="hello2" class="Spring.Hello2">
	</bean>

コールはSpringHelloWord(ハローハロー、Hello2のhello2)です。

コンストラクタ注入は注入の種類によって呼び出されているため、そう注入豆の2種類が存在する場合に例外をスローします。

5.autodetect

デフォルトコンストラクタが見つかった場合、「構造の自動組立」を使用し、それ以外の場合は、「タイプによる自動アセンブリを。」を使用

おすすめ

転載: blog.csdn.net/qq_36831305/article/details/89343434