发表于: 2017-08-11 23:17:47
2 916
今天完成的事情:
今天看了一天的springAOP,大致总结一下。
一、什么是AOP?
面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面
1.面向切面编程提供声明式事务管理
2.spring支持用户自定义的切面
面向切面编程(aop)是对面向对象编程(oop)的补充,
面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。
AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象
aop框架具有的两个特征:
1.各个步骤之间的良好隔离性
2.源代码无关性
Spring的事务管理机制实现的原理,就是通过这样一个动态代理对所有需要事务管理的Bean进行加载,并根据配置在invoke方法中对当前调用的 方法名进行判定,并在method.invoke方法前后为其加上合适的事务管理代码,这样就实现了Spring式的事务管理。Spring中的AOP实 现更为复杂和灵活,不过基本原理是一致的。
二、spring aop的两种配置方式
第一种:注解配置AOP
通过注解配置AOP,xml中只需要添加一个
<aop:aspectj-autoproxy/>


测试的结果:

第二种:xml配置AOP
配置可以通过xml文件来进行,大概有四种方式:
1. 配置ProxyFactoryBean,显式地设置advisors, advice, target等
2. 配置AutoProxyCreator,这种方式下,还是如以前一样使用定义的bean,但是从容器中获得的其实已经是代理对象
3. 通过<aop:config>来配置
4. 通过<aop: aspectj-autoproxy>来配置,使用AspectJ的注解来标识通知及切入点

测试结果:

三、AOP的实现原理---动态代理
spring的动态代理有两种:一是JDK的动态代理;另一种是cglib动态代理(通过修改字节码来实现代理)
1.JDK的代理方式主要是通过反射跟动态编译来实现的,主要搭配I女偶cationHandler和Proxy来实现,参照别人的博客写了一个两层代理。

运行结果如下;

凌晨一点38分43秒。
2.cglib动态代理



测试类

运行结果:
明天计划的事情:
明天请假一天。
遇到的问题:
理论性的东西,还没有理解透,感觉看了一天还是半瓢水,这个需要自己理解吃透,还不能用自己的话理解说出来。
总结:
今天敲了一些代码,这些天度没怎么敲代码,一直在刷面试题,aop应该不算是新知识,在做任务二的时候没有学这个aop,只是看了看这个东西,但是完全不理解,现在也只是熟悉了一些,能拿来做一些项目还是需要熟知于心。
评论