为什么我的自定义Spring方面没有被触发?

时间:2014-07-08 01:56:42

标签: java spring scala aop aspectj

我想使用Spring 4.X编织以下自定义方面。
(我使用Scala,但与Java完全相同) 我基于现有的code,作为Vaughn Vernon的IDDD书中的样本:

@Aspect
@Component
class EventProcessor @Autowired()(private val eventRepository: EventRepository) {

  @Before("execution(* com.mymainpackage.*.application.commands.*.*(..)")
  def listen() {
    DomainEventPublisher.instance().subscribe(new DomainEventSubscriber[Event] {

      def handleEvent(domainEvent: Event) {
        eventRepository.save(domainEvent)
      }

      def subscribedToEventType = {
        classOf[Event]
      }
    })
  }

}

我的application-context.xml

.........
<context:load-time-weaver/>
<context:annotation-config/>
<context:component-scan
        base-package="........" />

我想用方面编织的典型类/服务包含这种方法:

def handle(event:Event) 

及其相应的接口和实现可以在这个显式包中找到,例如:

com.mymainpackage.myboundedcontext1.application.commands.anestedpackage 

我已经检查过base-package包含自定义方面的类包。

是否有必要在@PointCut之外另外声明@Before? 样本没有这样做...
当然,我使用以下jar执行我的代码,允许在运行时“编织”,所以:

-javaagent:/cache/org.springframework/spring-instrument/jars/spring-instrument-4.0.0.RELEASE.jar

我是否错过了“显而易见”的内容? 知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

正如@ M.Deinum所提到的,我忘记了关于我的切入点的匹配器的最后)

此外,我忘了指定aspectj-autoproxy,以便考虑我的方面类 有了这个,如果我希望所有方面类都有他们创建的相应代理,就不需要声明一个aop.xml。

所以我通过向我的application-context.xml添加spring-aop xsd来指定它(“-------&gt;”来制作一个传说,虽然无效:)在这个xml中:< / p>

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:neo4j="http://www.springframework.org/schema/data/neo4j"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:aop="http://www.springframework.org/schema/aop"       ------->That is added
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/data/neo4j
           http://www.springframework.org/schema/data/neo4j/spring-neo4j-2.1.xsd  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd" ---------> That is added >

      .....
      <aop:aspectj-autoproxy/>
      .....

现在整个工作。