【发布时间】:2018-02-06 21:44:41
【问题描述】:
我想在 grails 3.3.2 中创建一个方面,每次调用我的域类对象的 save() 方法时都会执行该方面。
我该怎么做?
/************/
编辑: @pavger
我尝试了以下代码,尽管调用了 ProyectoService 的任何方法,但我的 Aspect 从未运行
服务领域类
import grails.gorm.services.Service
@Service(Proyecto)
interface ProyectoService {
Proyecto get(Serializable id)
List<Proyecto> list(Map args)
Long count()
void delete(Serializable id)
Proyecto save(Proyecto proyecto)
}
方面!
@Aspect
class MeAspect {
@PostConstruct
public void init() {
println "Inicializado"
}
@Pointcut("within(com.sample.ProyectoService.*())")
void isDomainClass() {}
@Around("isDomainClass()")
Object aroundSaveConnector(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
Object[] args = proceedingJoinPoint.getArgs()
println "Aspecto before"
Object object = proceedingJoinPoint.proceed(proceedingJoinPoint.getArgs())
println "Aspecto after"
return object
}
}
【问题讨论】:
-
您需要发布到目前为止您尝试过的代码。我们无法为您完成所有工作。至少向我们展示一下答案的尝试。
-
@pavger 我添加了更多细节!对不起,我的第一条评论!
-
您的问题中没有足够的信息。也许您的构建根本不使用 AspectJ 编译器,或者存在其他配置问题。也许您的示例类
ProyectoService位于错误的包中,而不是com.sample中。此外,within()切入点需要类型模式,而不是方法模式。因此,即使前两个问题得到解决,它也不能像这样工作。如果在您编辑问题后我能识别您的问题,我将很乐意回答。 -
aspectj 库使用的是 compile 'org.springframework:spring-aspects:4.3.12.RELEASE' 这是我拥有的代码,取决于 Poincut 运行与否的配置,问题是我希望它在我的域类对象的 save() 完成时运行
标签: spring grails aspectj aspect