//com.sun.proxy.$Proxy8: jdk动态代理System.out.println("proxy:" + proxy.getClass().getName());
package com.chentianyu;import com.chentianyu.ba01.SomeService;import com.chentianyu.ba01.SomeServiceImpl;import com.chentianyu.ba01.util.MyInvocationHandler;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;public class MyApp {public static void main(String[] args) {//创建目标对象SomeService target = new SomeServiceImpl();//创建InvocationHandler对象InvocationHandler handler = new MyInvocationHandler();//使用Proxy创建代理SomeService proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),handler);proxy.doSome("李四",21);}}
流程
<!--声明目标对象--><bean id="someService" class="com.chentianyu.ba01.SomeServiceImpl" />
<!--声明切面对象--><bean id="myAspect" class="com.chentianyu.ba01.MyAspect" />
光执行这俩行时,在容器中只有俩对象,没有代理对象
当走到
<!--声明自动代理生成器: 使用aspectj框架的内部的功能,创建目标对象的代理对象。
创建代理对象是在内存中实现的,修改目标对象的内存中的结构。创建为代理对象
所以你的目标对象就是一个被修改的代理对象
aspectj-autoproxy:会把spring容器中所有的目标对象一次性都生成代理对象
-->
<aop:aspectj-autoproxy />
他会启用aspectj框架功能,进行下面的处理,它会扫描这个容器中的对象,扫描的时候它会去找aspectj里面的注解@Aspect
