如何使用基于注解的配置来代替基于XML的配置
我通过基于XML的配置将Spring框架用于依赖注入。如何使用基于注解的配置来代替基于XML的配置
例如,我有3类:
1. public class Robot implements IRobot{ IHand hand;
-//-
}
2. public class SonyHand implements IHand{ -//- }
3. public class ToshibaHand implements IHand{ -//- }
而且我在XML文件:
<beans ...> <bean id="robot1" class="somepackage.Robot.class">
<property name="hand" ref="sonyHand">
</bean>
<bean id="robot2" class="somepackage.Robot.class">
<property name="hand" ref="toshibaHand">
</bean>
<bean id="sonyHand" class="somepackage.SonyHand.class"/>
<bean id="toshibaHand" class="somepackage.ToshibaHand.class"/>
</beans>
因此,春天的IoC(容器)将创建四个豆(对象)中所有。
Bean robot1(将引入一个sonyHand bean)。
Bean robot2(将引入一个toshibaHand bean)。
豆sonyHand。
豆toshibaHand。
问题是,我可以做纯粹基于注释的配置完全相同的东西吗?如果我这样做,那么如何?我已经试过这样:
@Configuration public class AppConfig{
@Bean
public Robot robot1(){
return new Robot();
}
@Bean
public Robot robot2(){
return new Robot();
}
@Bean
@Qualifier("sonyH")
public SonyHand sonyHand(){
return new SonyHand();
}
@Bean
@Qualifier("toshibaH")
public ToshibaHand toshibaHand(){
return new ToshibaHand();
}
}
轻微改变类:
1. public class Robot implements IRobot{ @Autowired("sonyH")
IHand hand;
-//-
}
2. public class SonyHand implements IHand{ -//- }
3. public class ToshibaHand implements IHand{ -//- }
这里几乎一无所有的XML文件中:
<beans ...> <context:component-scan base-package="somepackage"/>
</beans>
这一切工作,但这不是我需要什么,因为容器创建的豆将与前面的示例稍有不同:
Bean机器人1(将引入sonyHand bean)。
Bean机器人2(同样会引入sonyHand bean)。
豆sonyHand。
豆toshibaHand。
我知道为什么会发生这种情况(因为@Autowired(“sonyH”)),但我不知道如何解决它的问题,就像使用基于XML的配置一样。
回答:
稍微重构类
@Configuration public class AppConfig{
@Bean
public Robot robot1(IHand sonyH){
return new Robot(sonyH);
}
@Bean
public Robot robot2(IHand toshibaH){
return new Robot(toshibaH);
}
@Bean(name = "sonyH")
public SonyHand sonyHand(){
return new SonyHand();
}
@Bean(name = "toshibaH")
public ToshibaHand toshibaHand(){
return new ToshibaHand();
}
}
现在,如果你尝试自动装配这样
@Autowired Robot robot1 // this will have sonyH instance
@Autowired
Robot robot2 // this will have toshibaH instance
以上是 如何使用基于注解的配置来代替基于XML的配置 的全部内容, 来源链接: utcz.com/qa/266224.html