Java 在弹簧4.2中注入静态变量
我只是想测试Spring4.2中静态变量的注入。 在我学习教程的过程中,我使用了Spring2.0。在该教程中,如果按照以下步骤进行:Java 在弹簧4.2中注入静态变量,java,spring,Java,Spring,我只是想测试Spring4.2中静态变量的注入。 在我学习教程的过程中,我使用了Spring2.0。在该教程中,如果按照以下步骤进行: public class Car { private static String carName; public static void setCarName(String carName) { Car.carName = carName; } public static void printCar(){
public class Car {
private static String carName;
public static void setCarName(String carName) {
Car.carName = carName;
}
public static void printCar(){
System.out.println("Car name is: " + carName);
}
}
我的xml文件是:
上面的代码在与Spring2.0一起使用时抛出错误(如下面的教程所示)。
但是,如果我在Spring4.2中尝试相同的代码,它不会显示任何错误,代码工作正常。为什么行为上有差异??Spring在较新版本中是否对静态变量的注入做了任何更改?
所以我的问题是,我们可以直接进行静态变量的DI吗,如上图所示??- 对于你的第一个问题,根据a(重点是我的):
- 对于第二个问题,您可以进行静态依赖项注入,但是因为
是一个spring管理的bean,它是一个单例,所以在您的示例中不需要使用静态方法/字段Car
public class Car {
private static String carName;
public static void setCarName(String carName) {
Car.carName = carName;
}
public static void printCar(){
System.out.println("Car name is: " + carName);
}
}
下面是修改后的xml:
<beans>
<bean id="c" class="beans.Car" scope="prototype">
<property name="carName" value="Audi"/>
</bean>
<bean id="d" class="beans.Car" scope="prototype">
<property name="carName" value="Dodge"/>
</bean>
</beans>
现在你希望斯宾格在早上给你买奥迪,但是你被道奇困住了,这让spring看起来很愚蠢,因为让spring处理DI的全部原因是为了获得精确的和必需的依赖性
因此,spring使用这种模式(反模式?)。始终包括您得到的错误。如果没有,很难判断错误是由代码还是环境造成的。因为我使用的是Spring 4.2,所以我没有收到任何错误,但在教程中,上面的代码是在Spring 2.0中完成的,然后出现了一个
NotWritablePropertyExceptin
。所以我的问题是,我们可以在Spring4.0中直接进行静态变量的DI吗?如上所示?请注意,仅仅因为您可以这样做并不意味着您应该这样做。
public class Car {
private static String carName;
public static void setCarName(String carName) {
Car.carName = carName;
}
public static void printCar(){
System.out.println("Car name is: " + carName);
}
}
<beans>
<bean id="c" class="beans.Car" scope="prototype">
<property name="carName" value="Audi"/>
</bean>
<bean id="d" class="beans.Car" scope="prototype">
<property name="carName" value="Dodge"/>
</bean>
</beans>
@Service
public class GetCarInTheMorningService{
@Qualifier("c")
@Autowired
private Car myCar;
public Car getMyCar(){
reutrn myCar;
}
}