ca888亚洲娱乐城

点击《值得关注的技术和设计公众号》,发现精彩!Spring实践:面向切面编程(AOP){###}(点击上方公众号,可快速关注)来源:翡青链接:http://blog.csdn.net/zjf280441589/article/details/50816802AOP引介AOP(AspectOrientedPrograming)面向切面编程采用横向抽取机制,以取代传统的纵向继承体系的重复性代码(如性能监控/事务管理/安全检查/缓存实现等).横向抽取代码复用:基于代理技术,在不修改原来代码的前提下,对原有方法进行增强.SpringAOP历史1.2开始,Spring开始支持AOP技术(SpringAOP)SpringAOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码.2.0之后,为了简化AOP开发,Spring开始支持AspectJ(一个基于Java的AOP框架)框架.AOP相关术语术语中文描述Joinpoint连接点指那些被拦截到的点.在Spring中,这些点指方法(因为Spring只支持方法类型的连接点).Pointcut切入点指需要(配置)被增强的Joinpoint.Advice通知/增强指拦截到Joinpoint后要做的操作.通知分为前置通知/后置通知/异常通知/最终通知/环绕通知等.Aspect切面切入点和通知的结合.Target目标对象需要被代理(增强)的对象.Proxy代理对象目标对象被AOP?织入?增强/通知后,产生的对象.Weaving织入指把增强/通知应用到目标对象来创建代理对象的过程(Spring采用动态代理织入,AspectJ采用编译期织入和类装载期织入).Introduction引介一种特殊通知,在不修改类代码的前提下,可以在运行期为类动态地添加一些Method/Field(不常用).其他关于AOP理论知识可参考AOP技术研究.AOP实现SpringAOP代理实现有两种:JDK动态代理和Cglib框架动态代理,JDK动态代理可以参考博客代理模式的动态代理部分,在这里仅介绍CGLib框架实现.cglib动态代理cglib(CodeGenerationLibrary)是一个开源/高性能/高质量的Code生成类库,可以在运行期动态扩展Java类与实现Java接口.cglib比java.lang.reflect.Proxy更强的在于它不仅可以接管接口类的方法,还可以接管普通类的方法(cglib项目).从3.2开始,spring-core包中内置cglib类,因此可以不用添加额外依赖.UserDAO(并没有实现接口)/**?*@authorjifang?*@since16/3/3上午11:16.?*/publicclassUserDAO{???publicvoidadd(Objecto){????System.out.println("UserDAO->Add:"+o.toString());??}???publicvoidget(Objecto){????System.out.println("UserDAO->Get:"+o.toString());??}}CGLibProxyFactorypublicclassCGLibProxyFactory{???privateObjecttarget;???publicCGLibProxyFactory(Objecttarget){????this.target=target;??}???privateCallbackcallback=newMethodInterceptor(){?????/**?????*?????*@paramobj?代理对象?????*@parammethod??当期调用方法?????*@paramargs?方法参数?????*@paramproxy被调用方法的代理对象(用于执行父类的方法)?????*@return?????*@throwsThrowable?????*/????@Override????publicObjectintercept(Objectobj,Methodmethod,Object[]args,MethodProxyproxy)throwsThrowable{???????//前置增强??????System.out.println("+BeforeAdvice...");???????//执行目标方法??????//Objectresult=method.invoke(target,args);??????Objectresult=proxy.invoke(target,args);???????//后置增强??????System.out.println("+AfterAdvice...");???????returnresult;????}??};???publicObjectcreateProxy(){?????//1.创建Enhancer对象????Enhancerenhancer=newEnhancer();?????//2.cglib创建代理,对目标对象创建子对象????enhancer.setSuperclass(target.getClass());?????//3.传入回调接口,对目标增强????enhancer.setCallback(callback);?????returnenhancer.create();??}???publicstaticvoidmain(String[]args){????UserDAOproxy=(UserDAO)newCGLibProxyFactory(newUserDAO()).createProxy();????proxy.get("hello");????proxy.add("world");??}}AOP小结SpringAOP的底层通过JDK/cglib动态代理为目标对象进行横向织入:1)若目标对象实现了接口,则Spring使用JDK的java.lang.reflect.Proxy代理.2)若目标对象没有实现接口,则Spring使用cglib库生成目标对象的子类.Spring只支持方法连接点,不提供属性连接.标记为final的方法不能被代理,因为无法进行覆盖.程序应优先对针对接口代理,这样便于程序解耦/维护.SpringAOPAOP联盟为通知Advice定义了org.aopalliance.aop.Advice接口,Spring在Advice的基础上,根据通知在目标方法的连接点位置,扩充为以下五类:通知接口描述前置通知MethodBeforeAdvice在目标方法执行前实施增强后置通知AfterReturningAdvice…执行后实施增强环绕通知MethodInterceptor..执行前后实施增强异常抛出通知ThrowsAdvice…抛出异常后实施增强引介通知IntroductionInterceptor在目标类中添加新的方法和属性(少用)添加Spring的AOP依赖使用Spring的AOP和AspectJ需要在pom.xml中添加如下依赖:??org.springframework??spring-aop??${spring.version}(点击上方公众号,可快速关注)来源:翡青链接:http://blog.csdn.net/zjf280441589/article/details/50816802AOP引介AOP(AspectOrientedPrograming)面向切面编程采用横向抽取机制,以取代传统的纵向继承体系的重复性代码(如性能监控/事务管理/安全检查/缓存实现等).横向抽取代码复用:基于代理技术,在不修改原来代码的前提下,对原有方法进行增强.SpringAOP历史1.2开始,Spring开始支持AOP技术(SpringAOP)SpringAOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码.2.0之后,为了简化AOP开发,Spring开始支持AspectJ(一个基于Java的AOP框架)框架.AOP相关术语术语中文描述Joinpoint连接点指那些被拦截到的点.在Spring中,这些点指方法(因为Spring只支持方法类型的连接点).Pointcut切入点指需要(配置)被增强的Joinpoint.Advice通知/增强指拦截到Joinpoint后要做的操作.通知分为前置通知/后置通知/异常通知/最终通知/环绕通知等.Aspect切面切入点和通知的结合.Target目标对象需要被代理(增强)的对象.Proxy代理对象目标对象被AOP?织入?增强/通知后,产生的对象.Weaving织入指把增强/通知应用到目标对象来创建代理对象的过程(Spring采用动态代理织入,AspectJ采用编译期织入和类装载期织入).Introduction引介一种特殊通知,在不修改类代码的前提下,可以在运行期为类动态地添加一些Method/Field(不常用).其他关于AOP理论知识可参考AOP技术研究.AOP实现SpringAOP代理实现有两种:JDK动态代理和Cglib框架动态代理,JDK动态代理可以参考博客代理模式的动态代理部分,在这里仅介绍CGLib框架实现.cglib动态代理cglib(CodeGenerationLibrary)是一个开源/高性能/高质量的Code生成类库,可以在运行期动态扩展Java类与实现Java接口.cglib比java.lang.reflect.Proxy更强的在于它不仅可以接管接口类的方法,还可以接管普通类的方法(cglib项目).从3.2开始,spring-core包中内置cglib类,因此可以不用添加额外依赖.UserDAO(并没有实现接口)/**?*@authorjifang?*@since16/3/3上午11:16.?*/publicclassUserDAO{???publicvoidadd(Objecto){????System.out.println("UserDAO->Add:"+o.toString());??}???publicvoidget(Objecto){????System.out.println("UserDAO->Get:"+o.toString());??}}CGLibProxyFactorypublicclassCGLibProxyFactory{???privateObjecttarget;???publicCGLibProxyFactory(Objecttarget){????this.target=target;??}???privateCallbackcallback=newMethodInterceptor(){?????/**?????*?????*@paramobj?代理对象?????*@parammethod??当期调用方法?????*@paramargs?方法参数?????*@paramproxy被调用方法的代理对象(用于执行父类的方法)?????*@return?????*@throwsThrowable?????*/????@Override????publicObjectintercept(Objectobj,Methodmethod,Object[]args,MethodProxyproxy)throwsThrowable{???????//前置增强??????System.out.println("+BeforeAdvice...");???????//执行目标方法??????//Objectresult=method.invoke(target,args);??????Objectresult=proxy.invoke(target,args);???????//后置增强??????System.out.println("+AfterAdvice...");???????returnresult;????}??};???publicObjectcreateProxy(){?????//1.创建Enhancer对象????Enhancerenhancer=newEnhancer();?????//2.cglib创建代理,对目标对象创建子对象????enhancer.setSuperclass(target.getClass());?????//3.传入回调接口,对目标增强????enhancer.setCallback(callback);?????returnenhancer.create();??}???publicstaticvoidmain(String[]args){????UserDAOproxy=(UserDAO)newCGLibProxyFactory(newUserDAO()).createProxy();????proxy.get("hello");????proxy.add("world");??}}AOP小结SpringAOP的底层通过JDK/cglib动态代理为目标对象进行横向织入:1)若目标对象实现了接口,则Spring使用JDK的java.lang.reflect.Proxy代理.2)若目标对象没有实现接口,则Spring使用cglib库生成目标对象的子类.Spring只支持方法连接点,不提供属性连接.标记为final的方法不能被代理,因为无法进行覆盖.程序应优先对针对接口代理,这样便于程序解耦/维护.SpringAOPAOP联盟为通知Advice定义了org.aopalliance.aop.Advice接口,Spring在Advice的基础上,根据通知在目标方法的连接点位置,扩充为以下五类:通知接口描述前置通知MethodBeforeAdvice在目标方法执行前实施增强后置通知AfterReturningAdvice…执行后实施增强环绕通知MethodInterceptor..执行前后实施增强异常抛出通知ThrowsAdvice…抛出异常后实施增强引介通知IntroductionInterceptor在目标类中添加新的方法和属性(少用)添加Spring的AOP依赖使用Spring的AOP和AspectJ需要在pom.xml中添加如下依赖:??org.springframework??spring-aop??${spring.version}JavaNIO系列教程(8):SocketChannel{###}(点击上方公众号,可快速关注)英文:JakobJenkov译文:ifeve-郑玉婷链接:http://ifeve.com/socket-channel/JavaNIO中的SocketChannel是一个连接到TCP网络套接字的通道。LyftCEO约翰·齐默认为,“大家现在理解的移动共享出行,其实是Lyft开创的。参考资料:《深入理解Java虚拟机》【今日微信公号推荐↓】更多推荐请看《值得关注的技术和设计公众号》其中推荐了包括技术、设计、极客和IT相亲相关的热门公众号。对于职场精英们来说,只有学会管理压力、释放压力,才不会每天以牺牲健康为代价,疲于奔命。徐茂栋觉得还不够,他希望是20万个。
关键字: 站内搜索:
  • 关 键 字:  
  • 分 类:  
  • 搜索范围:  
  • 日期:  
  •  
会员文章分类列表
会员中心

没有相关信息

发表留言
 
评分:
很不喜欢 不喜欢 一般 喜欢 非常喜欢
标题:
 
留言内容:
* 已输入字符:0
小于等于500字符
表情:
  表情表情表情表情表情表情
留言人:
 
小于等于20个字符(包括A-Z、a-z、0-9、汉字、不含特殊字符)
性别:
 
您的邮箱:
 
示例:example@mail.com
 
  回复时请邮件通知我
手机号码:
 
由数字、“+”、中横杠“-”组成,最大允许20个字符
 
  回复时请短信通知我
联系电话:
 
小于等于32个字符(包含0-9、-、(、)、顿号)
公司名称:
 
所在地区:
 
联系地址:
 
网址:
 
验证码:
   
会员文章留言列表
 

目前没有相应的留言信息 目前没有相应的留言信息