当Spring在webapp中看到<task:annotation-driven>时会检查哪些上下文?</task:annotation-driven>

时间:2013-03-25 18:16:37

标签: java spring spring-mvc

我有一个servlet的应用程序上下文XML文件(/app/feature)。 Web应用程序作为一个整体还有一个应用程序上下文(即对于servlet上下文/app),并且有多个servlet与其他XML文件。我理解/app的春天语境可以作为/app/feature的参与者。

当我在子应用程序上下文中放入<task:annotation-driven/>时,会检查哪些bean是@Async和@Scheduled注释?

3 个答案:

答案 0 :(得分:1)

task:annotation-driven注册BeanPostProcessors,如ScheduledAnnotationBeanPostProcessor,每个容器的作用域为:

...beans that are defined in one container are not post-processed by 
a BeanPostProcessor defined in another container, even if both containers 
are part of the same hierarchy.

答案 1 :(得分:0)

内部逻辑是这样的,例如:applicationContext.xml是你说的父文件而spring-servlet.xml是你说的子文件。然后当tomcat启动时,首先将实例化applicationContext.xml中的所有bean,然后将实例化spring-servlet.xml中的所有bean,如果beanA在applicationContext.xml和spring中都被包含,那么会发生一些事情。 -servlet.xml,然后第一个A实例将被第二个实例覆盖。因此,如果在<task:annotation-driven/>中添加applicationContext.xml,它就不起作用,因为整个bean已被spring-servlet.xml中实例化的bean覆盖。

答案 2 :(得分:0)

它将寻找@Async,其中@Scheduled将使您能够像每隔5000毫秒一样安排执行。