动态代理类:在程序运行时,通过反射机制动态生成。
动态代理类通常代理接口下的所有类。
动态代理事先不知道要代理的是什么,只有在运行的时候才能确定。
动态代理的调用处理程
序必须事先InvocationHandler接口,及使用Proxy类中的newProxyInstance方法动态的创
建代理类。
Java动态代理只能代理接口,要代理类需要使用第三方的CLIGB等类库。
切面(Aspect): 横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象
通知(Advice): 切面必须要完成的工作
目标(Target): 被通知的对象
代理(Proxy): 向目标对象应用通知之后创建的对象
连接点(Joinpoint):程序执行的某个特定位置
aop:管理事务
aop 面向切面编程
切面----切点(包+类+方法)找到目标方法/被代理的方法-----通知(找到目标代理后怎加目标功能
---连接点---目标方法信息
在配置文件中<aop:aspect-autoproxy></aop:aspect-autoproxy>//开启aop动态代理
创建切面类 注释他@Aspect//代表切面类 @Component//让配置文件能扫描到他
AspectJ 支持 5 种类型的通知注解: //重点通知方式
@Before: 前置通知, 在方法执行之前执行
@After: 后置通知, 在方法执行之后执行
@AfterRunning: 返回通知, 在方法返回结果之后执行
@AfterThrowing: 异常通知, 在方法抛出异常之后
@Around: 环绕通知, 围绕着方法执行
通知注解括号中是切点,输入切入具体的切点地址,(是切入接口地址/不是切入实现类)
第一个*号返回任何的修饰符,第二个*号表示该类下所有,第三个*(..)表示对应接口的方法
例子:@Before(“execution(* com.lovo.*.service.IUserService.*(..))”)
方法中没有返回值(JoinPoint joinPoint)参数
@Around: 环绕通知, 需要在方法中书写返回值,返回类型为Object
方法传参(ProceedingJoinPoint joinPoint)方法参数
@Pointcut 切点 @Pointcut("execution(* *.service.IUserService.*(..))")
注解下的:方法 public void point(){}
用法可将切点方法放到,通知注释后,做到多个通知同时共享,封装
获取切面bean id = ‘’Aspect‘’
获取切点
<aop:ponintcut id="1" expression=切点"execution(* *.service.IUserService.*(..))"/>
aop
<aop:config>
//aop:通知@ //method获取切面Bean中的方法,书写方法名 ,pointcut-ref=切点注入
<aop:after method=" " pointcut-ref=“1”
//aop增强通知
<aop:aadvisor advice-ref="" pointcut="切点execution()"/>
</aop:config>