java.lang.NoSuchMethodError:..... EventProcessor:方法<init>()找不到V </init>

时间:2014-07-08 14:30:00

标签: java spring scala aspectj

我的目标是在所有命令处理程序的handle方法上编织一些自定义方面。

我的自定义方面:

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

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

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

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

}

commandHandler的一个例子:

trait CommentBlog {

  def handle(command: MyCommand): ValidationNel[Failure, Unit]

}

在运行时编译自定义方面时,整个工作非常有用。 对于生产,我希望它在编译时编织,所以我用一个很棒的plugin来实现它。

但是,运行时出现此错误导致NoAspectBoundException

java.lang.NoSuchMethodError: .....EventProcessor: method <init>()V not found

这个方法init究竟是什么?可能是根本原因?

1 个答案:

答案 0 :(得分:1)

我刚刚发现了这些东西:)

当@Landei提升时,找不到默认构造函数,因为它没有定义! 在斯卡拉:

class EventProcessor @Autowired()(private val eventRepository: EventRepository) {创建一个接受EventRepository的一个arg构造函数。

所以我的解决方案是:

@Aspect
class EventProcessor  {

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

      def handleEvent(domainEvent: Event) {
        val eventRepository = SpringContext.ctx.getBean("eventRepository", classOf[EventRepository])
        eventRepository.save(domainEvent)
      }

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

}