Spring&Spring MVC技术分享-自动装配:byType
作者:
22-426
,
2022-03-23 16:56:28
,
所有人可见
,
阅读 142
C02_D07_Autowire_byType
按照类型自动装配,如果找到多个符合的类型bean,则抛出异常:NoUniqueBeanDefinitionException;
按照类型装配不要求属性名和依赖的bean的id或name同名
//bean
public interface Person {
void kanChai();
}
public class Girl implements Person {
private String name;
private Axe axe; //砍柴需要一把斧子,所以依赖一个Axe对象
private Pet pet; //砍柴带一只宠物,所以依赖一个Pet对象
public void setName(String name) {
this.name = name;
}
public void setAxe(Axe axe) {
this.axe = axe;
}
public void setPet(Pet pet) {
this.pet = pet;
}
@Override
public void kanChai() {
System.out.println("砍柴人:"+name);
System.out.println("Girl砍柴,力气更大!!!");
axe.cut(); //使用斧子砍柴
pet.showSkill(); //宠物使用技能
}
}
public interface Axe {
void cut();
}
public class SteelAxe implements Axe{
@Override
public void cut() {
System.out.println("钢斧砍柴,很快很快!!!");
}
}
public interface Pet {
void showSkill();
}
public class Dog implements Pet{
@Override
public void showSkill() {
System.out.println("宠物狗技能:看着柴!");
}
}
//config-beans.xml
<!-- beans标记中可以使用default-autowire设置全局的默认自动装配方式 -->
<!-- 如果设置了该属性,则该文件中的所有bean使用该方法实现自动装配 -->
<!-- 但是如果针对某个bean又使用autowire指定了自动装配方式,则覆盖全局定义 -->
<!-- SteelAxe是实现了Axe接口的,所以它是Axe类型 -->
<bean id="fuzi" class="com.qdu.bean.SteelAxe" />
<!-- 按照类型自动装配,如果找到多个符合的类型,则抛出异常:NoUniqueBeanDefinitionException -->
<!--<bean id="fuzi2" class="com.qdu.bean.StoneAxe" />-->
<!-- Dog是实现了Pet接口的,所以它是Pet类型 -->
<bean id="chongwu" class="com.qdu.bean.Dog" />
<!-- 在bean标记上使用autowire指定自动装配的类型 -->
<!-- byType是按照Java类型进行自动装配,如果能找到符合的Java类型,则装配成功 -->
<!-- 按照类型装配不要求属性名和依赖的bean的id或name同名 -->
<bean id="person" class="com.qdu.bean.Girl" autowire="byType">
<property name="name" value="小明" />
<!-- 这里没有使用显式装配 -->
<!-- <property name="axe" ref="fuzi" />
<property name="pet" ref="chongwu" />-->
</bean>
//main
public static void main(String[] args) {
ApplicationContext ctx=new ClassPathXmlApplicationContext("config/beans.xml");
Person person=ctx.getBean(Person.class);
person.kanChai();
}