Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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 为什么我的方法不是异步的?_Java_Spring_Asynchronous - Fatal编程技术网

Java 为什么我的方法不是异步的?

Java 为什么我的方法不是异步的?,java,spring,asynchronous,Java,Spring,Asynchronous,我正在尝试使用Spring3.0提供的@async注释使方法异步 我已经完成了以下工作 在我的模块context.xml中包含以下内容 <task:executor id="initiateContactCreation" pool-size="2-10" queue-capacity="5"/> <task:annotation-driven executor="initiateContactCreation" /> 但我发现该方法不会立即返回控件 我的记录器显示 从

我正在尝试使用Spring3.0提供的@async注释使方法异步

我已经完成了以下工作

在我的
模块context.xml中包含以下内容

<task:executor id="initiateContactCreation" pool-size="2-10" queue-capacity="5"/>
<task:annotation-driven executor="initiateContactCreation" />
但我发现该方法不会立即返回控件

我的记录器显示 从
initiateContactCreation
记录日志,然后从
addContact
记录日志(PS.执行此方法需要时间,我不希望同步执行),然后从调用
initiateContactCreation的方法记录日志


我做错了什么?

因为这个方法是私有的,所以我假设您使用'this'引用从这个类中调用这个方法。Spring无法代理在类内进行的调用。调用必须来自类外部,以便Spring可以截取并应用它所做的注释和其他代理功能。

由于此方法是私有的,我假设您使用“this”引用从类内部调用此方法。Spring无法代理在类内进行的调用。调用必须来自您的类之外,这样Spring才能截取并应用它所做的注释和其他代理功能。

prabugp的解释很贴切,我没有更多的补充

不过,我确实有一些链接,您应该检查一下SpringAOP的缺陷以及如何克服它们(也适用于您的代码)

普拉布格普的解释很贴切,我没有更多的补充

不过,我确实有一些链接,您应该检查一下SpringAOP的缺陷以及如何克服它们(也适用于您的代码)


将我的方法公开会起到作用吗?将其公开,然后使用
调用它不会有帮助。更好的方法是将此方法移动到不同的服务(如果可能的话,在接口后面),这将使Spring更容易代理。将其公开不起作用,现在我需要尝试将其移动到不同的类中并调用,对吗?此外,我没有使用此函数调用方法将我的方法公开会起作用吗?将其公开,然后使用
this
调用它不会有帮助。更好的方法是将此方法移动到不同的服务(如果可能的话,在接口后面),这将使Spring更容易代理。将其公开不起作用,现在我需要尝试将其移动到不同的类中并调用,对吗?我也没有用它来调用这个方法
@Async
    private void initiateContactCreation(String fromUserId, List<String> toUsers){
        logger.info("Inside Async method for contact creation");
        ContactDetails contactDetails = new ContactDetails();
        contactDetails.setUserId(fromUserId);
        contactDetails.setContactEmailIds(toUsers.toArray(new String[toUsers.size()]));
        this.contactsAndDirSvc.addContact(contactDetails);
        logger.info("Returning from Async method for contact creation");
    }