我正在推出一个基本的春天@Async
示例。
我有一个如下界面
public interface AsyncInterface
{
public void test();
}
以下是实施
@Service
public class AsyncImpl implements AsyncInterface
{
@Async
public void test()
{
System.out.println( " This is seperate thread - let me sleep ");
for ( int i = 0; i < 10 ; i ++ )
{
try
{
Thread.sleep(1000);
}catch(Exception ex)
{
}
}
}
}
我在另一个spring组件中注入了上面的实现,并调用了用@Async
注释的方法。
我<task:annotation-driven/>
中有application-context
。
@Async
方法将被异步调用并在调用线程的范围内执行。异步行为没有发生。
如果我在test()方法中添加自定义注释,并且如果我编写一个方面来拦截,它就可以工作。
出于某种原因,AsyncExecutorIntercpetor
没有被触发(至少我在日志中看不到它)。
我在这里错过了一些东西。从另一个弹簧组件调用Cant @Async
?
由于 生命
这就是我调用异步
的方式我从另一个spring @Service组件
调用Async@Component
public class MyComponentImpl implements ComponentInterface
{
@Autowired
private AsyncInterface asyncInterface;
@Override
public void testAsyncInvocation() {
logger.debug( " Before calling async ");
asyncInterface.test();
logger.debug( " After calling async ");
}
}
配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd">
<aop:aspectj-autoproxy />
<context:annotation-config />
<tx:annotation-driven />
<task:annotation-driven/>
</beans>