Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.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
在JavaSpring注释中使用@enablesync将类级别实例设置为null_Java_Multithreading_Spring_Asynchronous - Fatal编程技术网

在JavaSpring注释中使用@enablesync将类级别实例设置为null

在JavaSpring注释中使用@enablesync将类级别实例设置为null,java,multithreading,spring,asynchronous,Java,Multithreading,Spring,Asynchronous,我使用下面的代码来测试我的异步实现。 (来自另一个SO职位的参考) 编辑:“在这里,MyAsyncClass是一个类,它有一些方法,用Spring的@Async注释进行了注释。” 正如代码注释中提到的,在使用@EnableAsync注释时,我在测试方法中将类级字段设置为null,并且在调试时显示了大量cglib$Callback字段 编辑: 主要类别: @Component public class MyAsyncClass { private final Param1 param1;

我使用下面的代码来测试我的异步实现。 (来自另一个SO职位的参考)

编辑:“在这里,MyAsyncClass是一个类,它有一些方法,用Spring的@Async注释进行了注释。”
正如代码注释中提到的,在使用
@EnableAsync
注释时,我在测试方法中将类级字段设置为
null
,并且在调试时显示了大量
cglib$Callback
字段

编辑:
主要类别:

 @Component
public class MyAsyncClass {
    private final Param1 param1;
    private final Param2 param2;

    @Autowired
    public MyAsyncClass(final Param1 param1, final Param2 param2) {
        this.param1 = param1;
        this.param2 = param2;
    }

    @Async
    public Future<T> performAction() {
        String result = param1.getDefaultName() + param2.getDefaultName();
        return new AsyncResult<String>(result);
    }
    @Async
    public Future<String> performAnotherAction() {
        String result = param1.getDefaultName() + param2.getDefaultName();
        return new AsyncResult<String>(result);
    }   
}

您是否尝试过实际使用该对象,即调用其方法之一,并查看会发生什么?您看到的是一个动态代理。这就是允许异步魔法发生的原因。是的,MyAsyncClass有多个方法,它们按预期异步调用,但由于param1和param2设置为null,我无法测试我的方法逻辑并获得null指针。发布MyAsyncClass的代码,发布测试代码,问题是,当应用enablesync注释时,从测试方法访问时,我将把param1和param2设置为null。我希望param1和param2变量是我在Bean注释方法中设置的。如果您不发布它,我们将无法帮助您在代码中找到问题。99.999%的可能性是代码中存在问题,0.001%的可能性是Spring问题。
 @Component
public class MyAsyncClass {
    private final Param1 param1;
    private final Param2 param2;

    @Autowired
    public MyAsyncClass(final Param1 param1, final Param2 param2) {
        this.param1 = param1;
        this.param2 = param2;
    }

    @Async
    public Future<T> performAction() {
        String result = param1.getDefaultName() + param2.getDefaultName();
        return new AsyncResult<String>(result);
    }
    @Async
    public Future<String> performAnotherAction() {
        String result = param1.getDefaultName() + param2.getDefaultName();
        return new AsyncResult<String>(result);
    }   
}
@Component
public class Param1 {
    public String getDefaultName() {
        return "Param1";
    }
}

@Component
public class Param2 {
    public String getDefaultName() {
        return "Param2";
    }
}