- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
切入点声明:
@Pointcut(value="com.someapp.someservice.someOperation() && args(t,req)",argNames="t,req")
private void logOperationArg(final String t,final String req)
{
}
建议声明未编译:
@Before(value="logOperationArg(t,req)")
public void logBeforeOperationAdvice(JoinPoint jp, final String t, final String req){
...
}
使用 Aspectj-maven-plugin(1.5 版本)编译 Aspect 时,出现错误“无法为该建议延迟构建 thisJoinPoint,因为它没有合适的防护 [Xlint:noGuardForLazyTjp]”
但是相同的建议在没有 JoinPoint 参数的情况下编译。
建议声明编译:
@Before(value="logOperationArg(t,req)")
public void logBeforeOperationAdvice(final String t, final String req){
...
}
最佳答案
Spring AOP
仅支持方法连接点
,因为它基于动态代理
,它在需要时创建代理对象(例如,如果您正在使用ApplicationContext,它将在从BeanFactory
加载bean后创建)
使用execution()
语句来匹配方法执行的连接点。
例如:
class LogAspect {
@Before("execution(* com.test.work.Working(..))")
public void beginBefore(JoinPoint join){
System.out.println("This will be displayed before Working() method will be executed");
}
现在如何声明您的 BO:
//.. declare interface
然后:
class BoModel implements SomeBoInterface {
public void Working(){
System.out.println("It will works after aspect");
}
}
execution()
语句是一个 PointCut 表达式,用于告诉应在何处应用您的建议。
如果你喜欢使用@PointCut
,你可以这样做:
class LogAspect {
//define a pointcut
@PointCut(
"execution(* com.test.work.SomeInferface.someInterfaceMethod(..))")
public void PointCutLoc() {
}
@Before("PointCutLoc()")
public void getBefore(){
System.out.println("This will be executed before someInterfaceMethod()");
}
}
第二部分:
此外,该错误表明您没有对您的建议加以警惕。从技术上讲,guard 使您的代码更快,因为您不需要每次执行它时都构造 thisJoinPoint。所以,如果它没有意义,你可以尝试忽略它
canNotImplementLazyTjp = ignore
multipleAdviceStoppingLazyTjp=ignore
noGuardForLazyTjp=ignore
关于java - Spring Aop 错误无法为此建议延迟构建 thisJoinPoint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20930098/
我正在使用 AspectJ 和“ajc”命令行编译器。我在编译期间在类路径('-cp')上指定了aspectjrt.jar、aspectjtools.jar和aspectjweaver.jar,但是当
切入点声明: @Pointcut(value="com.someapp.someservice.someOperation() && args(t,req)",argNames="t,req") pr
我试图建议大型第三方应用程序使用以下切入点/建议来拦截所有字段访问: before(Object target): get(* *) && target(target) && !within(aspe
我是一名优秀的程序员,十分优秀!