Tag: aspectj

使用Spring IoC和JavaConfig配置AspectJ方面?

根据Spring的文档使用Spring IoC配置AspectJ方面以配置Spring IOC的方面,必须在xml配置中添加以下内容: 正如@SotiriosDelimanolis所建议的那样,在JavaConfig中将以下内容重写为: @Bean public com.xyz.profiler.Profiler profiler() { com.xyz.profiler.Profiler profiler = com.xyz.profiler.Profiler.aspectOf(); profiler.setProfilingStrategy(jamonProfilingStrategy()); // assuming you have a corresponding @Bean method for that bean return profiler; } 但是,如果Profiler方面是用native aspectj .aj语法编写的,这似乎只能起作用。 如果它是用Java编写的并使用@Aspect注释,则会收到以下错误消息: 对于类型Profiler,方法aspectOf()未定义 对于使用@AspectJ语法编写的方面,是否有使用JavaConfig编写此方法的等效方法?

使用Instrumentation记录未处理的exception

我试图使用instrumentation调试java应用程序。 当前系统的问题是 几乎没有写任何日志声明 差异处理不当 这使得很难追溯function损坏的根本原因。 为了处理这种情况,我开发了工具,java代理使用Instrumentation API,我能够注入日志语句,并解决了一半的问题。 但下一个问题是记录exception。 我想在应用程序执行期间抛出的每个exception都扩展我的工具记录。 我尝试使用javaassist API为方法注入’try-catch’块(使用addCatch , insertBefore和insertAfter ),并且它在某种程度上是有效的。 public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { if (className.startsWith(“com/alu/”)) { return insertLog(className, classBeingRedefined, classfileBuffer); } if(className.endsWith(“Exception”)){ System.out.println(“============= exception occured “+className); } 这里inserLog(..)方法将注入必要的日志语句并且工作正常,但是当有任何exception时它不会来到变换器。 但问题是一些方法处理exception内部(即使没有log / sysout)。 例如: try { if(search.equals(“Category”)){ //do operation } } […]

关于带注释控制器的Spring AOP建议

我试图使用AOP在带注释的控制器之后进行一些处理。 一切都在运行,没有错误,但建议没有被执行。 这是控制器代码: @Controller public class HomeController { @RequestMapping(“/home.fo”) public String home(ModelMap model) { model = new ModelMap(); return “home”; } } 和application-config中的设置 和实际的建议 public class TestAdvice implements AfterReturningAdvice { protected final Log logger = LogFactory.getLog(getClass()); public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable { logger.info(“Called after returning advice!”); } } […]

Spring AOP切入点与接口上的注释匹配

我有一个在Java 6 / Spring 3中实现的服务类,它需要一个注释来限制角色访问。 我已经定义了一个名为RequiredPermission的注释,它具有一个名为OperationType的枚举中的一个或多个值作为其value属性: public @interface RequiredPermission { /** * One or more {@link OperationType}s that map to the permissions required * to execute this method. * * @return */ OperationType[] value();} public enum OperationType { TYPE1, TYPE2; } package com.mycompany.myservice; public interface MyService{ @RequiredPermission(OperationType.TYPE1) void myMethod( MyParameterObject obj ); } package com.mycompany.myserviceimpl; […]

@Aspect方面的Spring autowired bean为null

我有以下弹簧配置: 然后我有一个方面: @Aspect public class SyncLoggingAspect { @Autowired private SimpleEmailSender simpleEmailSender @AfterReturning(value=”execution(* uk.co.mysite.datasync.polling.Poller+.doPoll())”, returning=”pusher”) public void afterPoll(Pusher pusher) { simpleEmailSender.send(new PusherEmail(pusher)); } } 这个方面有效(我可以在afterPoll上打一个断点)但是simpleEmailSender是null。 不幸的是,我无法找到有关其原因的明确文档。 (为了记录,我的simpleEmailSender bean存在并正确连接到其他类)以下事情让我困惑: 上下文:组件扫描应该是@Aspect? 如果它肯定是一个弹簧托管bean,那么自动assembly应该工作吗? 如果context:component-scan不是用于创建方面,那么我的方面是如何创建的? 我认为aop:aspectj-autoproxy只是创建一个beanPostProcessor来代理我的@Aspect类? 如果它不是一个Spring托管bean,它会如何做到这一点? 显然你可以告诉我,我不了解事情应该如何从头开始。

在Spring AOP中使用代理

我正在读一本关于在Spring AOP中启用AspectJ支持的书。 以下是从该书中摘录的一段: 要在Spring IoC容器中启用AspectJ注释支持,您只需在bean配置文件中定义一个空的XML元素aop:aspectj-autoproxy。 然后,Spring将自动为您的AspectJ方面匹配的任何bean创建代理。 对于接口在应用程序设计中不可用或未使用的情况,可以依靠CGLIB创建代理。 要启用CGLIB,您需要在设置属性proxy-target-class=true 。 我无法得到第二段。 ‘ 接口不可用 ‘ 是什么意思。 任何人都可以用一个例子说明这一点

如何让Lombok和AspectJ一起工作?

我刚刚在关于龙目岛的SO上发布了这个问题而没有生成我的getter / setter。 事实certificate它与AspectJ相冲突。 如果我禁用AspectJ,则适当地生成getter / setter。 我的猜测是ajc编译器无法识别lombok。 Lombok和AspectJ是互斥的吗? 这两种技术是否协同工作?

如何使用AOP和AspectJ进行日志记录?

我想在我的所有公共方法中添加“trace”消息,如下所示: public void foo(s:String,n:int){// log是一个log4j记录器或任何其他库 log.trace(String.format(“输入foo with s:%s,n:%d”,s,n)) … log.trace(“退出foo”) } 现在我想用AOP(和字节码检测)自动将所有log.trace添加到我的方法中。 我正在考虑AspectJ 。 是否有意义? 你知道任何开源的吗?