Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 静态方法Depdendecy注入失败_Java_Spring_Dependency Injection_Spring Config - Fatal编程技术网

Java 静态方法Depdendecy注入失败

Java 静态方法Depdendecy注入失败,java,spring,dependency-injection,spring-config,Java,Spring,Dependency Injection,Spring Config,我正在学习spring框架静态方法依赖注入, 有许多问题已经张贴,但我的问题是不同的,因为我已经采取了一个类 package com.model; public class Test { private static String name; //private static Engine engine; public static void setName(String name) { Test.name = name;

我正在学习spring框架静态方法依赖注入, 有许多问题已经张贴,但我的问题是不同的,因为我已经采取了一个类

 package com.model;

    public class Test {

      private static String name;
      //private static Engine  engine;


     public static void setName(String name) {
        Test.name = name;
    }

    public  static void printData(){
      System.out.println("Helllo: "+name);
    }
 }
想要注入一个属性调用名,并通过使用spring.xml注入数据来检查它是否支持常规DI

xml包含

<bean id="t" class="com.model.Test">
    <property name="name" value="Vishal"/>
</bean>
当我运行这段代码时,它工作得很好

我不知道它是如何支持的,而是在SpringDoc必须通过时抛出一些异常

 org.springframework.beans.factory.config.MethodInvokingFactoryBean

我使用的是Spring4,我的代码有什么问题???

依赖项注入不是使用静态方法/字段来注入值的方法。考虑为同一类定义两个bean:

<bean id="t1" class="com.model.Test">
    <property name="name" value="Vishal"/>
</bean>
<bean id="t2" class="com.model.Test">
    <property name="name" value="Lorem ipsum"/>
</bean>
更麻烦的是,您可以在任何时候执行以下操作:

Test t3 = new Test();
t3.setName("Foo");
在Spring依赖项注入容器外部执行时,
t3
只是一个局部变量,与Spring无关,但是调用
t3.setName(“Foo)
会影响bean
t1
t2
-看到问题了吗


结论-使用SpringDI容器实例化具有非静态字段和方法的类创建每个bean的单个实例,您可以在整个应用程序中共享它。使这些bean无状态也很重要-如果在初始化后开始更改它们的状态,您可能会很快遇到问题。尝试搜索“spring依赖项注入最佳实践”获取一些关于如何使用Spring的好例子。

静态变量是class-label变量。因此,当类被加载时,可能是Spring上下文当时还没有加载。但是,有一种解决方法,使setter成为非静态的,这样它就可以工作了。但我相信在你的申请中不需要这样做。这种类型的需求可能表明设计不好,您应该重新审视应用程序的设计。下面是使setter非静态的解决方法。 解决方法:

package com.model;

    public class Test {

      private static String name;
      //private static Engine  engine;


     public void setName(String name) {
        Test.name = name;
    }

    public  static void printData(){
      System.out.println("Helllo: "+name);
    }
 }

问题是什么?它是如何通过对静态方法使用常规依赖项注入来支持的
Test t3 = new Test();
t3.setName("Foo");
package com.model;

    public class Test {

      private static String name;
      //private static Engine  engine;


     public void setName(String name) {
        Test.name = name;
    }

    public  static void printData(){
      System.out.println("Helllo: "+name);
    }
 }