在Spring 4.2中注入静态变量

ami*_*mit 2 java spring

我只是试图在Spring 4.2中测试静态变量的注入.正如我在阅读教程时那样,使用了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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的xml文件是:

<beans>
    <bean id="c" class="beans.Car">
        <property name="carName" value="Audi"/>
    </bean> 
</beans>
Run Code Online (Sandbox Code Playgroud)

我的课程测试它是:

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

上面的代码在与Spring 2.0一起使用时抛出错误(如我正在阅读的教程中所示).但是,如果我在Spring 4.2中尝试相同的代码,它没有显示任何错误,代码工作正常.行为的差异为什么?Spring是否会在较新版本中对静态变量的注入进行任何更改?所以我的问题是我们可以直接进行如下所示的静态变量DI吗?

小智 5

  • 对于你的第一个问题,根据这里评论(重点是我的):

SPR-8079在v3.1.0.M2中引入的ExtendedBeanInfo的目的是支持针对非void返回写入方法的依赖注入.但是,它也无意中引入了对静态setter方法的注入支持.

SPR-8079显示自3.1 M2起支持此功能

  • 对于你的第二个问题,是的,你可以做静态依赖注入,但因为Car是一个Spring托管bean,它是一个单例,所以不需要在你的例子中使用静态方法/字段.