我声明了以下建议给dao调用的Aspect,我正在尝试运行@Before建议,但它不起作用。

这里是方面。

package com.hedgebenefits.aop;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class AccessControlAspect {
    @Before("within(com.hedgebenefits.daos..*) && execution(public * *(..))")
    public void daoCall() {
        System.out.println("Before advice invoked for DAO method called ");
    }
}


我的application-context.xml具有以下标记

<aop:aspectj-autoproxy/>


我的道课如下:

package com.hedgebenefits.daos.impl;

import com.hedgebenefits.daos.AdminDao;
import com.hedgebenefits.domain.Admin;
import org.springframework.stereotype.Repository;

@Repository
public class AdminDaoImpl implements AdminDao{
    @Override
    public void save(Admin admin) {
    }
}


我设置了一个断点,但是我可以看到它没有激活,我肯定在这里犯了一些愚蠢的错误,但无法弄清楚。 Pl。建议。

最佳答案

您的方面需要成为应用程序上下文的一部分。


如果使用的是component-scan,则将@Component添加到AccessControllerAspect,或设置component-scan过滤器以包含@Aspect批注。要设置过滤器,请查看section 3.10.3 of the Spring documentation (Using filters to customize scanning)
如果使用xml配置,请为AccessControllerAspect添加一个bean。


添加aop:aspectj-autoproxy的行为还不够。这将告诉已经在您的应用程序上下文中的bean如何执行方面,它不会自动包括它们。

07-24 09:45
查看更多