06Spring_aop(aop开发、xml配置)

一、aop思想

	面向切面编程思想
	纵向重复,横向抽取(servlet、service、拦截器)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、Spring中aop概念

   Spring能够为容器管理的对象生成动态代理对象
   以往在使用动态代理,需要调用:Proxy.newProxyInstance(xx,xx,xx)生成代理对象
   Spring能为我们生成代理对象

三、Spring实现aop的原理

1.动态代理(优先使用)

	被代理对象必须要实现接口,才能产生代理对象,如果没有接口,将不能使用动态代理技术

2.cglib代理(没有接口)

	第三方代理技术,cglib代理,可以对任何类生成代理。
	代理原理:对目标对象进行继承代理
	如果目标对象被final修饰,那么该类无法被cglib代理	

UserService.java(interface)
在这里插入图片描述
UserServiceImpl.java
在这里插入图片描述
动态代理:UserServiceProxyFactory.java

在这里插入图片描述
动态代理:Demo在这里插入图片描述
cglib代理:UserServiceProxyFactory2.java
在这里插入图片描述
cglib代理:Demo.java
在这里插入图片描述

四、Spring的aop名词解释

1.Joinpoint(连接点):目标对象中,所有可以增强的方法

	即save()、delete()、update()、find()

2.Pointcut(切入点):目标对象中,已经增强的方法

即save()、delete()、update()、find()

3.Advice(通知/增强):增强的代码

	System.out.println("打开事务");
	System.out.println("提交事务");

4.Target(目标对象):被代理对象

	UserServiceImpl

5.Weaving(织入):将通知应用到切入点的过程

	UserServiceImpl到save()、delete()、update()、find()的过程

6.Proxy(代理):将通知织入到目标对象之后,形成代理对象。

	即usProxy

7.aspect(切面):切入点+通知

五、Spring的aop准备—导包&定义通知

1.步骤
	(1)导包4+2+2+2

			![在这里插入图片描述](https://img-blog.csdnimg.cn/20200617111717258.png)

Spring需要的第三方aop包
在这里插入图片描述
(2).准备目标对象
在这里插入图片描述
(3).准备通知

				前置通知:目标方法运行之前调用				
				后置通知:(如果出现异常,不会调用)目标方法运行之后调用
				环绕通知:目标方法运行之前和之后都调用			
	 			异常拦截通知:如果出现异常,就会调用
	 			后置通知:无论是否出现异常都会调用

在这里插入图片描述
(4).配置进行织入,将通知织入目标对象

在这里插入图片描述
2.测试
在这里插入图片描述

六、Spring的aop整理总结

aop 面向切面编程思想

纵向重复,横向抽取

动态代理

通过动态代理可以提现aop思想
对目标对象中的方法进行增强

Spring aop开发

Spring封装动态代理的代码,我们不需要手写动态代理代码
且封装了cglib代理
即看可以任何类进行代理增强

Spring中的名词
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43801116/article/details/106794953