为什么我的方法不是Asyncronous?

dev*_*v2d 0 java spring asynchronous

我试图使用Spring 3.0提供的@Async注释使方法异步

我做了以下

包括以下内容 module-context.xml

<task:executor id="initiateContactCreation" pool-size="2-10" queue-capacity="5"/>
<task:annotation-driven executor="initiateContactCreation" />
Run Code Online (Sandbox Code Playgroud)

带注释的方法 @Async

@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");
    }
Run Code Online (Sandbox Code Playgroud)

但我发现该方法不会立即返回控制.

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

我究竟做错了什么?

小智 5

由于此方法是私有的,我假设您使用'this'引用从此类中调用此方法.Spring无法代理在类中进行的调用.调用必须来自你的类之外,以便Spring可以拦截并应用它所做的注释和其他代理.