我是Spring MVC的新手。我正在学习依赖注入的概念。我正在使用依赖注入的Spring代码示例链接此链接。
在那个例子中,我非常清楚依赖注入的概念。但我有一个小问题,如何告诉Spring我想要使用多个形状。在第一个例子(基于构造函数)中,他给出了一个圆形对象的引用,以便绘制一个圆圈。
<bean id="geometryExample1" class="com.boraji.tutorail.spring.GeometryExample1">
<constructor-arg ref="circleShape"/>
</bean>
但是如果想画圆形,矩形和其他形状呢?我如何告诉或配置Spring,根据我提供的形状,它应该使用适当的形状来绘制形状。
感谢任何帮助。提前致谢。有什么建议吗?
答案 0 :(得分:1)
请找一个使用Java配置而不是XML配置的教程。如果您学习使用Java配置,您的生活会更容易。
自动装配时,您可以指定@Qualifier
并通过ID引用bean,例如
// This is your circle object
@Autowired
@Qualifier("geometryExample1")
public GeometryExample1 circleShape;
如果你有
<bean id="squareExample" class="com.boraji.tutorail.spring.GeometryExample1">
<constructor-arg ref="squareShape"/>
</bean>
...然后在你的代码中你会有这个:
// This is your square object
@Autowired
@Qualifier("squareExample")
public GeometryExample1 squareShape;
有关更多详细信息和使用Java配置实例化bean的示例,请参阅How to autowire by name in Spring with annotations?。
答案 1 :(得分:0)
实施你的课程:
class CircleShape implements Shape {
void draw() {
// TODO implementation
}
}
class RectangleShape implements Shape {
void draw() {
// TODO implementation
}
}
声明bean:
<bean id="rectangleShape" class="com.boraji.tutorail.spring.RectangleShape" />
<bean id="rectangleShape" class="com.boraji.tutorail.spring.CircleShape" />
<bean id="geometryExample1" class="com.boraji.tutorail.spring.GeometryExample1">
<constructor-arg ref="rectangleShape"/>
</bean>
Java方法是虚方法,因此调用RectangleShape中的draw()。 将geometryExample1 bean构造函数arg更改回CircleShape:
<bean id="geometryExample1" class="com.boraji.tutorail.spring.GeometryExample1">
<constructor-arg ref="circleShape"/>
</bean>
现在调用CircleShape中的draw()。
详细了解虚拟方法here。请使用注释。
我希望我能正确理解你的问题。
编辑: 示例类:
class GeometryExample1 {
private Set<Shape> shapes;
void example() {
shapes.foreach(Shape::draw);
}
public void setShapes(Set<Shape> shapes) {
this.shapes = shapes;
}
public Set<Shape> getShapes() {
return shapes;
}
}
和bean声明:
<bean id="geometryExample1" class="com.boraji.tutorail.spring.GeometryExample1">
<property name="shapes">
<set>
<ref bean="circleShape" />
<ref bean="rectangleShape" />
</set>
</property>
</bean>
在这种情况下,注释配置应该更清晰。