当前位置: 首页 > news >正文

专业手机网站建设公司潍坊网站建设策划方案

专业手机网站建设公司,潍坊网站建设策划方案,成都房地产信息网,qq小程序官网比较分析 Spring AOP 和 AspectJ 之间的差别 英文原文#xff1a;Comparative Analysis Between Spring AOP and AspectJ 标签#xff1a; AspectJ Spring158人收藏此文章, 我要收藏oschina 推荐于 3年前 (共 7 段, 翻译完成于 10-24) (19评) 参与翻译(2人)#xff1a; bear…比较分析 Spring AOP 和 AspectJ 之间的差别 英文原文Comparative Analysis Between Spring AOP and AspectJ 标签 AspectJ Spring 158人收藏此文章, 我要收藏oschina 推荐于 3年前 (共 7 段, 翻译完成于 10-24) (19评)  参与翻译(2人) bearkidult, super0555 仅中文 | 中英文对照 | 仅英文 | 打印此文章 面向方面的编程AOP 是一种编程范式旨在通过允许横切关注点的分离提高模块化。AOP提供方面来将跨越对象关注点模块化。虽然现在可以获得许多AOP框架但在这里我们要区分的只有两个流行的框架Spring AOP和AspectJ。这里将会帮助你基于一些关键信息为你的项目选择正确的技术。 Spring AOP不同于大多数其他AOP框架。Spring AOP的目的并不是为了提供最完整的AOP实现虽然Spring AOP具有相当的能力而是为了要帮助解决企业应用中的常见问题提供一个AOP实现与Spring IOC之间的紧密集成。由于Spring AOP是容易实现的如果你计划在Spring Beans之上将横切关注点模块化Spring的这一目标将是要点之一。但同样的目标也可能成为一个限制如果你用的是普通的Java对象而不是Spring beans,并基于此将横切关注点模块化的话。另一方面AspectJ可用于基于普通Java对象的模块化但在实施之前需要良好的关于这个主题的知识。 super0555翻译于 3年前 3人顶 顶 翻译的不错哦! 在决定使用哪种框架实现你的项目之前有几个要点可以帮助你做出合适的选择同样适用于其他框架。 Spring AOP致力于提供一种能够与Spring IoC紧密集成的面向方面框架的实现以便于解决在开发企业级项目时面临的常见问题。明确你在应用横切关注点(cross-cutting concern)时例如事物管理、日志或性能评估需要处理的是Spring beans还是POJO。如果正在开发新的应用则选择Spring AOP就没有什么阻力。但是如果你正在维护一个现有的应用该应用并没有使用Spring框架AspectJ就将是一个自然的选择了。为了详细说明这一点假如你正在使用Spring AOP当你想将日志功能作为一个通知(advice)加入到你的应用中用于追踪程序流程那么该通知(Advice)就只能应用在Spring beans的连接点(Joinpoint)之上。 bearkidult翻译于 3年前 4人顶 顶 翻译的不错哦! 例子在appbeans.xml中配置如下的切入点(pointcut)那么当调用myServices bean的service方法时就将应用日志通知(advice)。 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 !—Configuration snippet in appbeans.xml --   bean idmyServices classcom.ashutosh.MyServicesImpl /   aop:config     aop:aspect idloggingAspect reflogging        aop:around methodlog pointcutexecution(public * *(..))/    /aop:aspect  /aop:config -- // Java file calling service method ApplicationContext beans newClassPathXmlApplicationContext(appbeans.xml); MyServices myServices (MyServices) beans.getBean(myServices); myServices.service(); // Logging advice applied here 看一下日志通知将要被应用处的注释在这里应用程序将记录被调用方法的详细信息。但是当你在service()方法中调用同一个类中的其他方法时如果你没有使用代理对象那么日志通知就不会被应用到这个方法调用上。 例如 ? 1 2 3 4 5 6 7 // MyServices service method public void service() {   performOperation();// Logging advice not going to apply here } 如果你想要在通过this对象调用的方法上应用通知那么你必须使用currentProxy对象并调用其上的相应方法。 ? 1 2 3 4 5 6 7 8 9 // MyServices service method public void service() {   // Logging advice going to apply here   ((MyServices) AopContext.currentProxy()).performOperation(); } 于此相似如果你想要在某对象的方法上应用通知那么你必须使用与该对象相应的Spring bean。 ? 1 2 3 4 5 6 7 public void service() {   MyObject obj  new MyObject();   Obj.performOperation();// Logging advice not going to apply here } 如果你想要应用该通知那么上述代码必须修改为如下形式。 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 public void service() {   MyObject obj  new MyObject();  Obj.performOperation();// Logging advice not going to apply here  ApplicationContext beans newClassPathXmlApplicationContext(appbeans.xml);  MyObject obj (MyObject) beans.getBean(myObject);  obj.performOperation()// Logging advice applied here } 于此不同使用“AspectJ”你可以在任何Java对象上应用通知而不需要在任何文件中创建或配置任何bean。 bearkidult翻译于 3年前 3人顶 顶 翻译的不错哦! 另一个需要考虑的因素是你是希望在编译期间进行织入(weaving)还是编译后(post-compile)或是运行时(run-time)。Spring只支持运行时织入。如果你有多个团队分别开发多个使用Spring编写的模块导致生成多个jar文件例如每个模块一个jar文件并且其中一个团队想要在整个项目中的所有Spring bean例如包括已经被其他团队打包了的jar文件上应用日志通知在这里日志只是用于加入横切关注点的举例那么通过配置该团队自己的Spring配置文件就可以轻松做到这一点。之所以可以这样做就是因为Spring使用的是运行时织入。 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 !—Configuration -- bean idmyServices classcom.ashutosh.MyServicesImpl /  aop:config   aop:aspect idloggingAspect reflogging       aop:around methodlog pointcutexecution(public * *(..))/   /aop:aspect /aop:config -- 如果你使用AspectJ想要做到同样的事情你也许就需要使用acjAspectJ编译器重新编译所有的代码并且进行重新打包。否则你也可以选择使用AspectJ编译后(post-compile)或载入时(load-time)织入。 bearkidult翻译于 3年前 3人顶 顶 翻译的不错哦! 因为Spring基于代理模式使用CGLIB它有一个使用限制即无法在使用final修饰的bean上应用横切关注点。因为代理需要对Java类进行继承一旦使用了关键字final这将是无法做到的。 例如在Spring bean MyServicesImpl上使用关键字final并配置一个“execution(public * *(..))”这样的切入点将导致运行时异常(exception)因为Spring不能为MyServicesImpl生成代理。 ? 1 2 3 4 5 6 7 8 9 10 11 // Configuration file bean idmyServices classcom.ashutosh.MyServicesImpl / //Java file public final classMyServicesImpl {   --- } 在这种情况下你也许会考虑使用AspectJ其支持编译期织入且不需要生成代理。 于此相似在static和final方法上应用横切关注点也是无法做到的。因为Spring基于代理模式。如果你在这些方法上配置通知将导致运行时异常因为static和final方法是不能被覆盖的。在这种情况下你也会考虑使用AspectJ因为其支持编译期织入且不需要生成代理。 bearkidult翻译于 3年前 2人顶 顶 翻译的不错哦! 你一定希望使用一种易于实现的方式。因为Spring AOP支持注解在使用Aspect注解创建和配置方面时将更加方便。而使用AspectJ你就需要通过.aj文件来创建方面并且需要使用ajcAspect编译器来编译代码。所以如果你确定之前提到的限制不会成为你的项目的障碍时使用Spring AOP。 使用AspectJ的一个间接局限是因为AspectJ通知可以应用于POJO之上它有可能将通知应用于一个已配置的通知之上。对于一个你没有注意到这方面问题的大范围应用的通知这有可能导致一个无限循环。 bearkidult翻译于 3年前 2人顶 顶 翻译的不错哦! 例如创建一个包含如下切入点的方面。 ? 1 2 3 4 5 6 7 8 9 public aspectLogging {   Object around() : execution(public * * (..))   Sysytem.out.println(thisJoinPoint.getSignature());   return proceed(); } 在这种情况下当proceed即将被调用时日志通知会被再次应用这样就导致了嵌套循环。 所以如果你希望在Spring bean上采取比较简单的方式应用横切关注点时并且这些bean没有被标以final修饰符同时相似的方法也没有标以static或final修饰符时就使用Spring AOP吧。相比之下如果你需要在所提到的限制之上应用横切关注点或者要在POJO上应用关注点那么就使用AspectJ。你也可能选择同时使用两种方法因为Spring支持这样。 参考链接http://docs.spring.io/spring/docs/3.0.x/reference/aop.html 转载于:https://www.cnblogs.com/developer-ios/p/5611617.html
http://www.zqtcl.cn/news/418048/

相关文章:

  • 免费域名试用注册网站google搜索关键词热度
  • 温州建设小学网站高中资料网站免费
  • 室内设计网站官网大全电子商务网站后台核心管理
  • 网站建设报价图片欣赏福州网站建设报价
  • 网站推广基本方法是文创产品设计稿
  • 厦门网站制作公司推荐作文网投稿网站
  • 网站开发过什么软件杭州cms建站模板下载
  • 做中东服装有什么网站谁能给我个网址
  • 深圳网站建设公司服务平台河北省建设银行网站首页
  • 新密网站网页版微信小程序在哪
  • 长春建一个网站大概要多少钱微信公众号开店流程
  • 网站运营实例django 微信小程序开发教程
  • wordpress 搭网站郑州网站建设华久
  • 网站建设图片尺寸专门做音乐的网站
  • 株洲做网站外贸推广产品
  • 枫叶的网站建设博客企业网站样板制作
  • 织梦网站文章相互调用百度下载老版本
  • pc网站的优势网站建设款属不属于无形资产
  • 网站建设数据安全分析网络全案推广
  • 网站建设哪家好就推 鹏博资讯手机自助建网站
  • 沈阳网站制作招聘网长治网站建设电话
  • 承德网站设计公司余姚做百度网站
  • 阿里云购买网站空间做网站怎么插音乐循环
  • 网站设计时应考虑哪些因素惠州做网站
  • 西安网站搭建的公司网站建设条例
  • 网站建设联系网站改备案信息吗
  • 建设一个看电影的网站唐山网址建站
  • 呼和浩特网站建设价格vs网站开发入门
  • 中国农业工程建设协会网站有专业做线切割配件的网站吗
  • 东莞建网站公司哪个好陕西手机网站建设公司