请解释一下,为什么在目标上执行代理上的自调用而不是代理?如果是故意的,那又是为什么呢?如果通过子类创建代理,则可以在每次方法调用之前执行一些代码,即使在自调用时也是如此。我试过了,我有自我调用的代理
public class DummyPrinter {
public void print1() {
System.out.println("print1");
}
public void print2() {
System.out.println("print2");
}
public void printBoth() {
print1();
print2();
}
}
Run Code Online (Sandbox Code Playgroud)
public class PrinterProxy extends DummyPrinter {
@Override
public void print1() {
System.out.println("Before print1");
super.print1();
}
@Override
public void print2() {
System.out.println("Before print2");
super.print2();
}
@Override
public void printBoth() {
System.out.println("Before print both");
super.printBoth();
}
}
Run Code Online (Sandbox Code Playgroud)
public class Main {
public static void main(String[] args) {
DummyPrinter p = new PrinterProxy();
p.printBoth();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Before …Run Code Online (Sandbox Code Playgroud) 所以,我在网上阅读,你不能将配置定为最终的,因为 CGLIB 扩展了类来创建代理。但是,我正在阅读 @Scope 的文档,默认的 proxyMethod 值是不创建代理(链接在这里 - https://docs.spring.io/springframework/docs/current/javadoc-api/org/springframework/ context/annotation/Scope.html)。
所以,我的主要问题是,是否为每个 @Configuration 创建一个代理?