gpt4 book ai didi

java - 在 Spring 4.2 中注入(inject)静态变量

转载 作者:行者123 更新时间:2023-11-30 06:10:51 26 4
gpt4 key购买 nike

我只是想测试 Spring 4.2 中静态变量的注入(inject)。当我在学习教程时,使用了 Spring 2.0。在该教程中,如果按如下方式完成:

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">
<property name="carName" value="Audi"/>
</bean>
</beans>

我要测试的类(class)是:

public class Client {
public static void main(String[] args) {
ApplicationContext ap= new ClassPathXmlApplicationContext("resources/spring.xml");
Car car= (Car)ap.getBean("c");
car.printCar();
}
}

上面的代码在与 Spring 2.0 一起使用时会抛出错误(如我所遵循的教程中所示)。但是如果我在 Spring 4.2 中尝试相同的代码,它不会显示任何错误并且代码工作正常。为什么行为不同? Spring 是否对注入(inject)静态变量的新版本进行了任何更改?所以我的问题是我们可以像上面那样直接做静态变量的DI吗??

最佳答案

  • 关于您的第一个问题,根据 comment here (重点是我的):

The intention of ExtendedBeanInfo, introduced with SPR-8079 in v3.1.0.M2, was to support dependency injection against non-void returning write methods. However, it also inadvertently introduced support for injection against static setter methods.

SPR-8079表明这是从 3.1 M2 开始支持的

  • 对于你的第二个问题,是的,你可以进行静态依赖注入(inject),但是因为 Car 是一个 spring 管理的 bean,它是一个单例,所以不需要在你的例子中使用静态方法/字段。

关于java - 在 Spring 4.2 中注入(inject)静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35112794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com