SSM————SpringAOP(接Spring注解)【4】
*一、Spring整合junit测试(解决反复写测试类的问题):
步骤:
第一步:导包4+2+aop+test
第二步:配置注解
@RunWith(SpringJUnit4ClassRunner.class) 帮我们创建容器
@ContextConfiguration("classpath:applicationContext.xml") 指定创建容器时使用哪个配置文件
用前面的注入方式注入,如:@Resource
第三步:测试

二、SpringAop思想引导
aop思想:横向重复,纵向抽取
以前用到aop思想的例子:

三、AOP的概念
所谓的手动和自动,手动是所有代码人工手打,自动是配置spring去自动实现你的需求
Spring能为容器中代理的对象生成动态代理对象
以前使用动态代理(手动)【不常用】,需要自己调用下面的这个方法生成代理对象。
//
参考:https://www.cnblogs.com/xdp-gacl/p/3971367.html
static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
newProxyInstance方法用来返回一个代理对象
这个方法总共有3个参数,ClassLoader loader用来指明生成代理对象使用哪个类装载器
Class<?>[] interfaces用来指明生成哪个对象的代理对象,通过接口指定
InvocationHandler h用来指明产生的这个代理对象要做什么事情。
所以我们只需要调用newProxyInstance方法就可以得到某一个对象的代理对象了。
动态代理对象必须有被代理对象的方法但是又不能是被代理对象所以这里要用多态 Person p = new Liudehua();
UserService.java
UserServiceImpl.java
UserServiceProxyFactory.java
测试Demo.java
![]()
(手动的cglib代理)【不常用】
UserService.java和UserServiceImpl.java与上面的相同
UserServiceProxyFactory2.java
![]()
测试Demo2.java

//
使用spring之后(自动)【常用】,spring帮我们生成代理对象(SpringAop)。
Spring主要是用动态代理技术和cglib代理技术帮我们生成代理对象,下面对动态代理和cglib进行详解
Spring优先使用动态代理,没有接口时再使用cglib生成代理对象
四、SpringAop(自动)【常用】
SpringAop封装了动态代理和cglib代理
cglib代理
规则:(不需要接口)第三方代理技术,cglib代理技术,可以对任何类生成代理,代理的原理是:对目标对象进行继承代理,如果目标对象被final修饰,那么该类无法被cglib代理。
动态代理
规则:被代理对象必须要有接口,才能产生代理对象,如果没有接口将不能产生动态代理
相关名词:
Joinponit(连接点):被代理对象中,所有可以增强的方法。
Pointcut(切入点):被代理对象中,确定要增强的方法
Advice(通知/增强):代理对象中,写的增强的代码
Target(目标对象):被代理对象
Weaving(织入):将通知织入切入点
Proxy(代理):将通知织入到目标对象之后,形成代理对象
aspect(切面):切入点+通知
使用步骤:
1、导包:4+2+2

2、准备目标对象

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

4、配置进行织入(ConplicationContext.xml)
步骤:准备工作:导入aop(约束)命名空间
(1)配置目标对象
(2)配置通知对象
(3)配置将通知织入对象

5、测试Demo.java

五、*注解配置(了解)
步骤:
前三步和上面一样
4、



六、SpringAop总结
Aop面向切面的编程思想:横向重复代码,纵向抽取
动态代理:
1,通过动态代理可以提现aop思想
2,对象目标对象中的方法进行增强
Spring aop开发
Spring封装了动态代理代码,开发人员就不需要手写动态代理代码
还封装了cglib代理,所以可以对任何类进行处理增强。







浙公网安备 33010602011771号