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

网站推广昔年下拉创新的南昌网站建设

网站推广昔年下拉,创新的南昌网站建设,设计软件培训,网站域名实名认证官网有时#xff0c;我想记录#xff08;通过slf4j和log4j #xff09;方法的每次执行#xff0c;查看其接收的参数#xff0c;返回的内容以及每次执行需要多少时间。 这是我在AspectJ #xff0c; jcabi-aspects和Java 6注释的帮助下进行的操作#xff1a; public class F… 有时我想记录通过slf4j和log4j 方法的每次执行查看其接收的参数返回的内容以及每次执行需要多少时间。 这是我在AspectJ jcabi-aspects和Java 6注释的帮助下进行的操作 public class Foo {Loggablepublic int power(int x, int p) {return Math.pow(x, p);} } 这是我在log4j输出中看到的 [INFO] com.example.Foo #power(2, 10): 1024 in 12μs [INFO] com.example.Foo #power(3, 3): 27 in 4μs 很好不是吗 现在让我们看看它是如何工作的。 带有运行时保留的注释 注释是Java 6中引入的一种技术。它是一种元编程工具它不会改变代码的工作方式但会为某些元素方法类或变量提供标记。 换句话说注释只是附加到可以查看和阅读的代码的标记。 某些注释仅在编译时可见-编译后在.class文件中不存在。 其他的在编译后仍然可见并且可以在运行时访问。 例如 Override是第一种类型其保留类型是SOURCE 而来自JUnit的Test是第二种类型保留类型是RUNTIME 。 Loggable 我在上面的脚本中使用的那个是jcabi-aspects中第二种类型的注释。 编译后它与.class文件中的字节码保持在一起。 再次强调重要的是要理解即使方法power()已注释和编译它到目前为止也不会向slf4j发送任何内容。 它只包含一个标记上面写着“请记录我的执行情况”。 面向方面的编程AOP AOP是一种有用的技术它允许在不显式更改源代码的情况下将可执行块添加到源代码。 在我们的示例中我们不想在类内部记录方法执行。 相反我们希望其他类拦截对方法power()每次调用测量其执行时间然后将此信息发送给slf4j。 我们希望拦截器理解我们的Loggable批注并记录对该特定方法power()每次调用。 而且当然其他的方法应使用相同的拦截器以后我们将在其中放置相同的注释。 这种情况完全符合AOP的初衷-避免在多个类中重新实现某些常见行为。 日志记录是我们主要功能的补充功能我们不想使用多个日志记录指令来污染我们的代码。 相反我们希望在后台进行日志记录。 就AOP而言我们的解决方案可以解释为创建一个方面 该方面在某些连接点处横切代码并应用环绕建议以实现所需的功能。 AspectJ 让我们看看这些神奇的词是什么意思。 但是首先让我们看一下jcabi-aspects如何使用AspectJ实现它们这是一个简化的示例您可以在MethodLogger.java找到完整的代码 Aspect public class MethodLogger {Around(execution(* *(..)) annotation(Loggable))public Object around(ProceedingJoinPoint point) {long start System.currentTimeMillis();Object result point.proceed();Logger.info(#%s(%s): %s in %[msec]s,MethodSignature.class.cast(point.getSignature()).getMethod().getName(),point.getArgs(),result,System.currentTimeMillis() - start);return result;} } 这是一个方面 里面有一个关于 around() 建议 。 方面用Aspect注释而建议用Around注释。 如上所述这些注释只是.class文件中的标记。 除了为那些对运行时感兴趣的人提供一些元信息外他们什么也不做。 注释Around有一个参数在这种情况下该参数表示在以下情况下建议应适用于方法 其可见性修饰符为* public protected或private 它的名字是名字* 任何名字 它的参数是.. 任何参数 和 它用Loggable注释 如果要截获对带注释的方法的调用则在执行实际方法之前先执行方法around() 。 当要拦截对power()方法的调用时 around()方法将接收类ProceedingJoinPoint的实例并且必须返回一个对象该对象将作为power()方法的结果使用。 为了调用原始方法power() 建议必须调用连接点对象的proceed() 。 我们编译此方面并使其与主文件Foo.class一起在classpath中可用。 到目前为止一切都很好但是我们需要采取最后一步以便将我们的方面付诸实践-我们应该应用我们的建议。 二元方面编织 方面编织是建议应用过程的名称。 Aspect Weaver通过注入对Aspect的调用来修改原始代码。 AspectJ正是这样做的。 我们给它提供了两个二进制Java类Foo.class和MethodLogger.class 它给退三-修改Foo.class Foo$AjcClosure1.class和未修改MethodLogger.class 。 为了了解哪些建议应应用于哪些方法AspectJ weaver使用了.class文件中的注释。 同样它使用反射来浏览类路径上的所有类。 它通过Around注释分析哪些方法满足条件。 当然它找到我们的方法power() 。 因此有两个步骤。 首先我们使用javac编译.java文件并获得两个文件。 然后AspectJ编织/修改它们并创建自己的额外类。 编织后我们的Foo类如下所示 public class Foo {private final MethodLogger logger;Loggablepublic int power(int x, int p) {return this.logger.around(point);}private int power_aroundBody(int x, int p) {return Math.pow(x, p);} } AspectJ weaver将我们的原始功能移动到新方法power_aroundBody() 并将所有power()调用重定向到方面类MethodLogger 。 现在我们有四个类一起工作而不是Foo类中的power()方法。 从现在开始这就是每次调用power()幕后发生的事情 方法power()原始功能由图中的绿色小生命线指示。 如您所见方面编织过程将类和方面连接在一起并通过连接点在它们之间转移调用。 无需编织类和方面都只是带有附加注释的已编译Java二进制文件。 jcabi方面 jcabi-aspects是一个JAR库其中包含Loggable注释和MethodLogger方面顺便说一句还有更多方面和注释。 您不需要编写自己的方面来进行方法记录。 只需在类路径中添加一些依赖项然后配置jcabi-maven-plugin进行编织在Maven Central中获取其最新版本 projectdepenenciesdependencydependencygroupIdcom.jcabi/groupIdartifactIdjcabi-aspects/artifactId/dependencydependencygroupIdorg.aspectj/groupIdartifactIdaspectjrt/artifactId/dependency/dependency/depenenciesbuildpluginsplugingroupIdcom.jcabi/groupIdartifactIdjcabi-maven-plugin/artifactIdexecutionsexecutiongoalsgoalajc/goal/goals/execution/executions/plugin/plugins/build /project 由于该编织过程需要大量的配置工作因此我创建了一个方便的带有ajc目标的Maven插件该插件可以完成整个方面的编织工作。 您可以直接使用AspectJ但是我建议您使用jcabi-maven-plugin 。 而已。 现在您可以使用com.jcabi.aspects.Loggable注释您的方法将通过slf4j记录。 如果某些内容无法按照说明进行操作请随时提交Github问题 。 相关文章 您可能还会发现以下有趣的帖子 如何在异常上重试Java方法 缓存Java方法结果 摆脱Java静态记录器 限制Java方法执行时间 简单的Java SSH客户端 翻译自: https://www.javacodegeeks.com/2014/09/java-method-logging-with-aop-and-annotations.html
http://www.zqtcl.cn/news/156884/

相关文章:

  • 聊城wap网站建设清溪东莞网站建设
  • 书籍网站建设规划书app开发公司价格表
  • 小程序网站模板住建个人证书查询网
  • 西安 美院 网站建设贵阳美丽乡村建设网站
  • 平顶山市哪里有做网站的wordpress应用教程
  • 制作企业网站的实训报告医院网站设计模板
  • 要做网站照片怎么处理广东外发加工网
  • 做国际网站每年要多少钱厦门 外贸商城网站
  • 城乡建设学校官方网站程序外包网站
  • 深圳 网站设计师 招聘西数网站管理助手 伪静态
  • 广州网站备案要求国外工装设计网站大全
  • php+mysql 2012也买酒商城网站源码怎么用net123做网站
  • 西充移动网站建设如何设计一个简洁的logo
  • 济宁做网站自媒体新手入门
  • 重庆网站开发哪家专业网站布局图
  • 网站设计原则的历史网站开发 模块
  • 做企业网站收费自己的网站怎么做排名
  • 做网站网站软件开发经费预算
  • 优化网站图片网站图片布局
  • 有效的网站需要做到什么意思商业网站是什么
  • 网站设计开发网站用c 建网站时怎么做导航菜单栏
  • 哪些网站做推广比较有效果厦门网站建设公司名单
  • 街头小吃加盟网站建设网站专题制作
  • 网站论坛推广方案加强思政部网站建设
  • 查看WordPress网站插件北京西站附近的景点有哪些
  • 网站建设技术合同模板下载怎么用phpstudy做网站
  • 青岛网站建设找二维码生成器怎么弄
  • 百度突然搜不到我的网站网络安全软件有哪些
  • 江阴做网站的地方网站维护需要的知识
  • 做网站是域名怎么申请网页设计跟做网站一样吗