1. //com.sun.proxy.$Proxy8: jdk动态代理
  2. System.out.println("proxy:" + proxy.getClass().getName());
  1. package com.chentianyu;
  2. import com.chentianyu.ba01.SomeService;
  3. import com.chentianyu.ba01.SomeServiceImpl;
  4. import com.chentianyu.ba01.util.MyInvocationHandler;
  5. import java.lang.reflect.InvocationHandler;
  6. import java.lang.reflect.Proxy;
  7. public class MyApp {
  8. public static void main(String[] args) {
  9. //创建目标对象
  10. SomeService target = new SomeServiceImpl();
  11. //创建InvocationHandler对象
  12. InvocationHandler handler = new MyInvocationHandler();
  13. //使用Proxy创建代理
  14. SomeService proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(),
  15. target.getClass().getInterfaces(),handler);
  16. proxy.doSome("李四",21);
  17. }
  18. }

流程

  1. <!--声明目标对象-->
  2. <bean id="someService" class="com.chentianyu.ba01.SomeServiceImpl" />
  1. <!--声明切面对象-->
  2. <bean id="myAspect" class="com.chentianyu.ba01.MyAspect" />

光执行这俩行时,在容器中只有俩对象,没有代理对象

当走到

<!--声明自动代理生成器: 使用aspectj框架的内部的功能,创建目标对象的代理对象。
创建代理对象是在内存中实现的,修改目标对象的内存中的结构。创建为代理对象
所以你的目标对象就是一个被修改的代理对象

aspectj-autoproxy:会把spring容器中所有的目标对象一次性都生成代理对象
-->
<aop:aspectj-autoproxy />

他会启用aspectj框架功能,进行下面的处理,它会扫描这个容器中的对象,扫描的时候它会去找aspectj里面的注解@Aspect