Java私塾《深入浅出学Spring3》——系列精品教程Java私塾-最专业的Java就业培训专家,因为专业,所以出色!值得你的信赖!私塾在线独家提供配套教学视频,更有大量免费在线学习视频独家大放送nAOP入门包括:是什么、能干什么、AOP基本思想的演变《深入浅出学Spring3开发》——系列精品教程真正高质量培训签订就业协议网址::460190900本节课程概览Java私塾-最专业的Java就业培训专家,因为专业,所以出色!值得你的信赖!私塾在线独家提供配套教学视频,更有大量免费在线学习视频独家大放送真正高质量培训签订就业协议网址::460190900第三章:AOP开发《深入浅出学Spring3开发》——系列精品教程Java私塾-最专业的Java就业培训专家,因为专业,所以出色!值得你的信赖!私塾在线独家提供配套教学视频,更有大量免费在线学习视频独家大放送nAOP是什么(AspectOrientedProgramming)AOP是一种编程范式,提供从另一个角度来考虑程序结构以完善面向对象编程(OOP)。AOP为开发者提供了一种描述横切关注点的机制,并能够自动将横切关注点织入到面向对象的软件系统中,从而实现了横切关注点的模块化。AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理、日志管理、权限控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。nAOP能干什么,也是AOP带来的好处1:降低模块的耦合度2:使系统容易扩展3:设计决定的迟绑定:使用AOP,设计师可以推迟为将来的需求作决定,因为它可以把这种需求作为独立的方面很容易的实现。4:更好的代码复用性真正高质量培训签订就业协议网址::460190900AOP入门-1《深入浅出学Spring3开发》——系列精品教程Java私塾-最专业的Java就业培训专家,因为专业,所以出色!值得你的信赖!私塾在线独家提供配套教学视频,更有大量免费在线学习视频独家大放送userDep权限管理工程计划表现层---------------逻辑层---------------数据层计划审批表现层---------------逻辑层---------------数据层计划察看表现层---------------逻辑层---------------数据层Java私塾-最专业的Java就业培训专家,因为专业,所以出色!值得你的信赖!私塾在线独家提供配套教学视频,更有大量免费在线学习视频独家大放送真正高质量培训签订就业协议网址::460190900AOP入门-2《深入浅出学Spring3开发》——系列精品教程Java私塾-最专业的Java就业培训专家,因为专业,所以出色!值得你的信赖!私塾在线独家提供配套教学视频,更有大量免费在线学习视频独家大放送n假设已有如下的程序实现n考虑这样一个问题:要对系统中的某些方法添加日志记录、性能监测、安全控制等功能,这种需要添加功能的方法散布在很多个类中。面对这种需求,应该怎么办呢?真正高质量培训签订就业协议网址::460190900AOP基本思想的演变过程-1《深入浅出学Spring3开发》——系列精品教程interfacePayEbi{//接口定义行为集publicvoidpay();}classPointPayEboimplementsPayEbi{publicvoidpay(){业务逻辑}}classRMBEboimplementsPayEbi{publicvoidpay(){业务逻辑}}Java私塾-最专业的Java就业培训专家,因为专业,所以出色!值得你的信赖!私塾在线独家提供配套教学视频,更有大量免费在线学习视频独家大放送n一个很自然的实现方式,可能如下:n很快,大家发现里面有很多重复代码,一个自然的改进方式是:把公共部分提出来,做成公共模块或者是公共的父类,然后让应用调用这些公共模块或者是继承公共的父类。可能的示例如下:真正高质量培训签订就业协议网址::460190900AOP基本思想的演变过程-2《深入浅出学Spring3开发》——系列精品教程classPointPayEboimplementsPayEbi{publicvoidpay(){//1.记录日志开始//2.时间统计开始//3.安全检查业务逻辑//4.时间统计结束}}classRMBPayEboimplementsPayEbi{publicvoidpay(){//1.记录日志开始//2.时间统计开始//3.安全检查业务逻辑//4.时间统计结束}}Java私塾-最专业的Java就业培训专家,因为专业,所以出色!值得你的信赖!私塾在线独家提供配套教学视频,更有大量免费在线学习视频独家大放送真正高质量培训签订就业协议网址::460190900AOP基本思想的演变过程-3《深入浅出学Spring3开发》——系列精品教程classPointPayEboimplementsPayEbi{publicvoidpay(){//1.使用LogUtil记录日志//2.使用TimeUtil开始时间统计//3.使用SecurityUtil进行安全检查业务逻辑//4.使用TimeUtil结束时间统计}}classRMBPayEboimplementsPayEbi{publicvoidpay(){//1.使用LogUtil记录日志//2.使用TimeUtil开始时间统计//3.使用SecurityUtil进行安全检查业务逻辑//4.使用TimeUtil结束时间统计}}classLogUtil{//记录日志}classTimeUtil{//时间统计开始//时间统计结束}classSecurityUtil{//安全检查}Java私塾-最专业的Java就业培训专家,因为专业,所以出色!值得你的信赖!私塾在线独家提供配套教学视频,更有大量免费在线学习视频独家大放送n仍然存在问题:大家会发现,需要修改的地方分散在很多个文件中,如果需要修改的文件多那么修改的量会很大,这无疑会增加出错的几率,并且加大系统维护的难度。而且,如果添加功能的需求是在软件开发的后期才提出的话,这样大量修改已有的文件,也不符合基本的“开-闭原则”。n改进的解决方案采用装饰器模式或者代理模式来实现。n装饰器模式定义动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。n代理模式定义为其他对象提供一种代理以控制对这个对象的访问真正高质量培训签订就业协议网址::460190900AOP基本思想的演变过程-4《深入浅出学Spring3开发》——系列精品教程Java私塾-最专业的Java就业培训专家,因为专业,所以出色!值得你的信赖!私塾在线独家提供配套教学视频,更有大量免费在线学习视频独家大放送记录日志安全检查业务逻辑记录日志+安全检查+业务逻辑砖墙腻子涂料Java私塾-最专业的Java就业培训专家,因为专业,所以出色!值得你的信赖!私塾在线独家提供配套教学视频,更有大量免费在线学习视频独家大放送真正高质量培训签订就业协议网址::460190900AOP基本思想的演变过程-5《深入浅出学Spring3开发》——系列精品教程nJDK动态代理解决方案(比较通用的解决方案)publicclassMyInvocationHandlerimplementsInvocationHandler{privateObjecttarget;publicMyInvocationHandler(Objecttarget){this.target=target;}publicObjectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable{//1.记录日志2.时间统计开始3.安全检查ObjectretVal=method.invoke(target,args);//4.时间统计结束returnretVal;}publicObjectproxy(){returnProxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),newMyInvocationHandler(target));}}Java私塾-最专业的Java就业培训专家,因为专业,所以出色!值得你的信赖!私塾在线独家提供配套教学视频,更有大量免费在线学习视频独家大放送nCGLIB动态代理的解决方案:publicclassMyInterceptorimplementsMethodInterceptor{privateObjecttarget;publicMyInterceptor(Objecttarget){this.target=target;}publicObjectintercept(Objectproxy,Methodmethod,Object[]args,MethodProxyinvocation)throwsThrowable{//1.记录日志2.时间统计开始3.安全检查ObjectretVal=invocation.invoke(target,args);//4.时间统计结束returnretVal;}publicObjectproxy(){returnEnhancer.create(target.getClass(),newMyInterceptor(target));}}真正高质量培训签订就业协议网址::460190900AOP基本思想的演变过程-6《深入浅出学Spring3开发》——系列精品教程Java私塾-最专业的Java就业培训专家,因为专业,所以出色!值得你的信赖!私塾在线独家提供配套教学视频,更有大量免费在线学习视频独家大放送nJDK动态代理的特点不能代理类,只能代理接口nCGLIB动态代理的特点能代理类和接口,不能代理final类n动态代理的本质用来实现对目标对象进行增强,最终表现为类,只不过是动态创建子类,不用手工生成子类。n动态代理的限制只能在父类方法被调用之前或之后进行增强(功能的修改),不能在中间进行修改,要想在方法调用中增强,需要ASM(一个Java字节码操作和分析框架)真正高质量培训签订就业协议网址::460190900AOP基本思想的演变过程-7《深入浅出学Spring3开发》——系列精品教程Java私塾-最专业的Java就业培训专家,因为专业,所以出色!值得你的信赖!私塾在线http:/