我正在尝试使用Spring为我创建的项目中的几个类提供加载时间编织。当我打电话给不属于我本地项目的班级时,我无法让它工作。
我创建了一个名为ExampleClass
的类,当我对其中的方法执行@Around
时,我可以看到我对返回的修改,但是当我尝试对{ {1}}我无法获得任何结果。
这是我的String
代码:
Aspect
这是我对该代码的调用:
@Pointcut("call(* java.lang.String.*(..))")
public void cutString() {}
@Before("cutString()")
public void aroundString() throws Throwable {
System.out.println("I Never See This");
}
public class Main {
public static void main(String[] args) {
new ClassPathXmlApplicationContext("classpath:my-context.xml");
String string = new String("I Only See This");
System.out.println(string.toLowerCase());
}
}
的内容只是my-context.xml
。
我有一个<context:load-time-weaver />
定义,正如我所说的那样适用于一个类,但不适用于另一个类:
aop.xml
我错过了什么,或者这是Spring和AspectJ的限制吗?
答案 0 :(得分:3)
默认的aspectj不会编织任何java标准类。据我记忆,这是防止安全漏洞的限制。它在aspectj文档中描述。可能有一个属性允许改变这种行为,但你应该非常确定在开始这样做之前你需要这个。
只需用自己的一个类创建另一个jar并尝试编织这个。这应该是开箱即用的。
答案 1 :(得分:2)
call()
代替execution()
作为外部类。