spring框架学习(六)AOP
AOP(Aspect-OrientedProgramming)面向方面编程,与OOP完全不同,使用AOP编程系统被分为方面或关注点,而不是OOP中的对象。
AOP的引入
在OOP面向对象的使用中,无可避免的会出现代码重复,而且使用面向对象的编程方式,这种重复无法避免,比如用户权限判断中,根据相应的权限执行相应的方法;在servlet中设置编码格式时,同样相同的代码出现很多次,而且还根业务无关,很容易忘记写,结果运行的时候就出现乱码拉。这种重复代码不仅使编码麻烦,而且还不容易维护。而AOP则将这些代码整理起来,将解决某个切面问题的代码单独的放在某个模块中,然后再织入到程序中。
AOP中的术语
Aspect:横切面的功能, 抽象出类,或接口, AOP编程重要的就是识别出横切面功能。
(方面,类似于字符编码功能)
Advice: 横切面功能的具体实现,需要根据实际的情况分析,如果在目标对象操作之前是 before在操作之后,就是 after advice。
(增强,类似于字符编码过滤器)
Pointcut:切入点,描述横切面功能应用的限制,不是所有的流程都需要,那些可以使用的地方就是切入点
(类似于过滤器的匹配规则 /*)
Joinpoint: 连接点,或指组件加入流程的时机,比如设置属性,调用方法,等,spring只支持方法调用的连接点,而其他的一些框架支持属性的连接点如:AspectJ,
(类似于过滤器的过滤规则 REQUEST,FORWARD)
Weave: 缝合,将组件应用到业务流程中的这个过程,叫缝合或织入。
(类似于将过滤器配置到web.xml文件的过程)
Proxy,代理,在实现上,Spring的AOP其实就是使用JDK的动态代理(使用接口的方式完成代理操作),也可以使用CGLIB(使用继承的方式完成代理操作)。
Target,目标,业务操作的实际对象
实例:设置字符编码格式看作是一个Aspect方面,而拦截器就是一个Advice增强。
- <span style="font-size:18px;"><!-- 字符编码过滤器-->
- <filter>
- <filter-name>characterFilter</filter-name>
- <filter-class>com.bjpowernode.egov.filter.CharacterEncodingFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>characterFilter</filter-name>
- <url-pattern>/servlet/*</url-pattern>
- </filter-mapping>
- </span>
过滤器类
- <span style="font-size:18px;">public class CharacterEncodingFilter implements Filter {
- @Override
- public void destroy() {}
- @Override
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChainchain) throws IOException, ServletException {
- request.setCharacterEncoding("GB18030");
- chain.doFilter(request,response);
- }
- @Override
- publicvoid init(FilterConfig filterConfig) throws ServletException {}
- }</span>
这样就不用在每个servlet中设置编码拉。。
spring框架中AOP的使用
1,拷贝jar包
2,spring配置文件中增加命名空间和约束文件
启用aop功能:就把标签添加进来就可以拉。
3,写被代理的类和扩展类
4,由配置文件声明
- <span style="font-size:18px;"><!--声明目标类-->
- <bean id="targetclass" class="com.spring.aop.TargetClass"></bean>
- <!--声明扩展类-->
- <bean id="extendsclass" class="com.spring.aop.extendsClass"></bean>
- <!--织入扩展类,并声明在哪个方法上执行扩展类-->
- <aop:config>
- <aop:aspect id="extendAspect" ref="">
- <aop:pointcut expression="execution(public ** (..))" id="extendsPoincat">
- <!--在目标方法执行前执行的方法-->
- <aop:before method="beforemethod" pointcut-ref="extendsPoincat" />
- <!--在目标方法执行后执行的方法-->
- <aop:after method="aftermethod" pointcut-ref="extendsPoincat" />
- </aop:aspect>
- </aop:config></span>
5,测试
Spring框架中使用AOP的优点
Aop与spring的IOC容器整合,增强,切入点都是javabean,可以在同一文件中配置
和spring的其他部分一样,可以在不同应用服务器之间任意移植
spring实现Aop的拦截接口,使得用户不必绑定在特定的拦截器接口上
aop面向切面的编程思想,打破面向对象的思维方式,我们要学习的不仅是aop的使用,更要学习面向切面的这种思想。
spring框架学习(六)AOP的更多相关文章
- Spring框架学习05——AOP相关术语详解
1.Spring AOP 的基本概述 AOP(Aspect Oriented Programing)面向切面编程,AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视.事务管理.安全检查 ...
- Spring框架学习06——AOP底层实现原理
在Java中有多种动态代理技术,如JDK.CGLIB.Javassist.ASM,其中最常用的动态代理技术是JDK和CGLIB. 1.JDK的动态代理 JDK动态代理是java.lang.reflec ...
- spring框架学习(三)——AOP( 面向切面编程)
AOP 即 Aspect Oriented Program 面向切面编程 首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能. 所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务 ...
- Spring框架学习一
Spring框架学习,转自http://blog.csdn.net/lishuangzhe7047/article/details/20740209 Spring框架学习(一) 1.什么是Spring ...
- Spring框架学习1
AnonymouL 兴之所至,心之所安;尽其在我,顺其自然 新随笔 管理 Spring框架学习(一) 阅读目录 一. spring概述 核心容器: Spring 上下文: Spring AOP ...
- Spring框架学习之IOC(一)
Spring框架学习之IOC(一) 先前粗浅地学过Spring框架,但当时忙于考试及后期实习未将其记录,于是趁着最近还有几天的空闲时间,将其稍微整理一下,以备后期查看. Spring相关知识 spri ...
- Spring框架学习总结(上)
目录 1.Spring的概述 2.Spring的入门(IOC) 3.Spring的工厂类 4.Spring的配置 5.Spring的属性注入 6.Spring的分模块开发的配置 @ 1.Spring的 ...
- Spring框架学习笔记(1)
Spring 框架学习笔记(1) 一.简介 Rod Johnson(spring之父) Spring是分层的Java SE/EE应用 full-stack(服务端的全栈)轻量级(跟EJB比)开源框架, ...
- spring框架学习(三)junit单元测试
spring框架学习(三)junit单元测试 单元测试不是头一次听说了,但只是听说从来没有用过.一个模块怎么测试呢,是不是得专门为一单元写一个测试程序,然后将测试单元代码拿过来测试? 我是这么想的.学 ...
随机推荐
- infoq - neo4j graph db
My name is Charles Humble and I am here at QCon New York 2014 with Ian Robinson. Ian, can you introd ...
- word record about IR target detecting and tracking
1 is submerged in background clutter 淹没在背景杂波中 2 performe poorly for the dim small targets in sever c ...
- Entity Framework7 有哪些不同?现在开发到什么程度了?
Entity Framework7之开篇 一.Entity Framework7 简介 Entity Framework7简称EF7,是微软正在开发的最新的在.NET应用中首选的数据访问技术.它是轻量 ...
- 在64位SQL Server中创建Oracle的链接服务器
当我们同时使用SQL Server和Oracle来存储数据时,经常会用到跨库查询.为了方便使用跨库查询,一个最好的办法就是通过创建链接服务器来实现.既可以在SQL Server中创建Oracle的链接 ...
- eclipse构建maven+scala+spark工程 转载
转载地址:http://jingpin.jikexueyuan.com/article/47043.html 本文先叙述如何配置eclipse中maven+scala的开发环境,之后,叙述如何实现sp ...
- Unity四元数小问题整理
1.Unity中,四元数不能保存超过360度的旋转,所以如此大范围的旋转不能直接两个四元数做插值(当你用0度和721度的四元数做插值,它只会转1度,而不会转两圈). 2.要把旋转设置成某个方向,用Lo ...
- Excel的数据导入到PB的DW中
Excel的数据导入到PB的DW中//==================================================================== // Event:cb_ ...
- matplotlib绘制动画
matplotlib从1.1.0版本以后就开始支持绘制动画,具体使用可以参考官方帮助文档.下面是一个很基本的例子: """ A simple example of an ...
- eclipse最有用快捷键整理
在网上搜eclipse快捷键,可以搜出一大堆,大多罗列了n多的快捷键,估计大部分人看了以后都会头大的,我也头大,不过我一一尝试了一遍,整理出了eclipse最常用最有用,写代码必须用到的一些快捷键,大 ...
- GitHub注册账号
username : hcloudypassword : hujunyun3174email : 370284221@qq.com