Java 为什么我的方法不是异步的?
我正在尝试使用Spring3.0提供的@async注释使方法异步 我已经完成了以下工作 在我的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" /> 但我发现该方法不会立即返回控件 我的记录器显示 从
模块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");
}