【发布时间】:2017-12-13 22:24:36
【问题描述】:
我正在研究 Spring 依赖注入。
我想使用弹簧计算矩形和圆形的面积并使用依赖注入。
到目前为止,我已经完成了这个:
界面:
public interface Shape {
double calculateArea();
}
圈子类
public class Circle implements Shape{
@Autowired
public double radius;
@Override
public double calculateArea() {
double area = (Math.PI)*radius*radius;
return area;
}
}
矩形类:
public class Rectangle implements Shape {
@Autowired
public double length;
@Autowired
public double breadth;
@Override
public double calculateArea() {
double area = length*breadth;
return area;
}
}
bean xml:
<bean id="circle" class="org.package.test.Circle">
<property name="radius" value="12"/>
</bean>
<bean id="rectangle" class="org.package.test.Rectangle">
<property name="length" value="12"/>
<property name="breadth" value="10"/>
</bean>
<bean id="geometricalShape" class="org.package.test.GeometricalShape">
<constructor-arg ref="circle"/>
<constructor-arg ref="rectangle"/>
</bean>
GeometricalShape.java
private Shape shape;
private Shape shape1;
/**
* Inject circle object via Constructor
*/
public GeometricalShape(Shape shape,Shape shape1) {
this.shape = shape;
this.shape1 = shape1;
}
public void calculate() {
shape.calculateArea();
shape1.calculateArea();
}
}
Main.Java
public class Main {
public static void main(String[] args) {
@SuppressWarnings("resource")
ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
GeometricalShape bean1=context.getBean("geometricalShape", GeometricalShape.class);
geometryBean1.calculate();
}
}
这里我直接提供半径/长度或宽度作为静态值。我如何将它作为动态值提供(这是我想要通过在 Spring 中更改它的任何值?)有没有更好的方法使用 Spring 依赖注入来做到这一点?请问有什么建议吗?
【问题讨论】:
-
您通常不会使用 Spring 注入可变(变化的、动态的)数据。您更有可能注入数据提供者(它们不会更改,但提供动态数据)或数据处理器。 Spring 的连接发生在创建上下文时。
-
当然你可以使用FactoryBeans来动态提供值在注入的时候,但是这个要谨慎使用。
标签: java spring spring-mvc dependency-injection