如何使用基于注解的配置来代替基于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

回到顶部