Tag: aspectj

为什么没有为Jersey控制器检测到我的Aspect(使用自定义注释)?

我想在Jersey控制器上创建一个Aspect来衡量服务执行的时间。 我正在与我的切入点作斗争,因为它没有被检测到,我的方面永远不会被启动。 我尝试过使用大量的切入点,例如: execution(@Monitor * *.*(..)) execution(public * *(..)) change the order of @Aspect and @Component Added a pointcut like this: @Pointcut(“execution(@Monitor * *.*(..))”) public void monitorRequestTargets(){} @Around(“monitorRequestTargets()”) Tried using AOP and CGLIB Also tried changing the order of configuration in context.xml Eclipse检测到我的方法正在建议我的方法,但它不会在运行时执行。 你能否给我一些提示,说明为什么没有创建方面或切入点没有启动? 我的代码如下。 的context.xml 我的MonitorAspect @Component @Aspect public class MonitorAspect { private static […]

AspectJ加载时间编织不能在Spring bean上运行

我正在开发一个项目,该项目使用Spring配置的Java(而不是xml)风格来连接依赖项。 它还具有应通过AspectJ编织到所需方法(通过注释)的分析逻辑。 设置工作正常,我可以看到我所需的包中的类被编织,并且可以从中记录分析信息。 问题是编织对@Bean类@Bean 。 我通过以下方式在aop.xml启用了调试: 我可以看到我所需的包中的类被编织,但不是配置中的bean。 如果我直接实例化类(不注入它们)编织工作。 不幸的是,我不能在这里发布真实的代码,但这是一个愚蠢的例子: @Configuration @EnableLoadTimeWeaving(aspectjWeaving = EnableLoadTimeWeaving.AspectJWeaving.ENABLED) public class MySpringConfig { @Bean AnnotatedClass1 annotatedClass1() { return new AnnotatedClass1(new AnnotatedClass2()); } } AnnotatedClass1和AnnotatedClass2存在于同一个包中,编织工作在直接实例化的那个上,而不是bean返回的那个。 我搜索过Spring AOP文档,但我似乎无法找到与此相关的任何内容。 你需要为自动代理做一些魔术,以及SpringAOP的一些限制,但加载时间编织应该尽可能地工作 – 例如我试过私有方法并且它有效。

JUnit测试AspectJ

我正在尝试为Custom Aspect编写Junit测试。 这是Aspect Class Snippet: @Aspect @Component public class SampleAspect { private static Logger log = LoggerFactory.getLogger(SampleAspect.class); @Around(“execution(* org.springframework.data.mongodb.core.MongoOperations.*(..)) || execution(* org.springframework.web.client.RestOperations.*(..))”) public Object intercept(final ProceedingJoinPoint point) throws Throwable { logger.info(“invoked Cutom aspect”); return point.proceed(); } } 因此,只要关节点与切入点匹配,上述方面就会截获。 它的工作正常。 但我的问题是如何对该类进行unit testing。 我有以下Junit测试: @Test(expected = MongoTimeoutException.class) public void TestWithMongoTemplate() { //MongoDocument class TestDocument test = new […]

为什么在制作Spring项目时我没有接触到weaver警告?

当我制作Spring项目时,我似乎得到了一堆这样的警告。 该项目使用Compile Time Weaving和各种Spring注释,如Transactional,Autowired和Configurable。 我有三个问题:它们是什么(效果是什么)? 我应该关注他们吗? 和“我该怎么做才能删除它们?” ajc: this affected type is not exposed to the weaver: com.myapp.domain.UserEntity [Xlint:typeNotExposedToWeaver] 让我知道你需要帮助我解决这个问题。 我可以发布POM文件的相关部分,部分Java Spring配置文件或其他任何内容。 我真的不知道需要什么,所以让我知道。 我在春季论坛上看到了它,但那个地方是一个鬼城。 有几个人问了这个问题,但没有答案。 我正在使用Java配置Spring和CTW。

代码分析工具和类型间声明

我有一个由Spring Roo生成的maven项目,并使用几个工具(checkstyle,pmd等)来收集有关我的项目的信息。 (即我正在使用codehaus’声纳 ) Roo大量使用AspectJ Inter Type声明(ITD)来分离诸如持久性,javabeans-getter / setter等问题。 这些ITD在编译时编织,因此checkstyle和pmd(在源级别工作)等工具有很多误报。 我目前看到的唯一解决方案是停用对使用ITD的类的检查。 还有更好的想法?

如何在类上创建一个方面,这不是使用Spring AOP的bean?

我在遗留应用程序上工作,使用Spring AOP(即ProxyFactoryBean )。 我需要在某个类的方法周围添加一个方面。 但是这个类不是 bean。 AspecjJ切入点表达式如下: execution(* xyz.package.Class.method()) 我创建了一个MethodInterceptor和AspectJExpressionPointcut ,但我不知道如何使这两个一起工作。 编辑 : 我没有这个类的源代码,它是第三方库。 这个类的实例不是由我创建的,既不是在源代码中创建的,也不是作为bean在spring配置中创建的。 它由库内部使用。 任何帮助赞赏。

当双代理接口时,Spring AspectJ失败:无法生成类的CGLIB子类

我正在使用Spring的来代理一些JPA存储库接口。 但是,代理失败,以下内容Cannot subclass final class class $Proxy80 : 无法生成类[class $ Proxy80]的CGLIB子类:此问题的常见原因包括使用最终类或不可见类; 嵌套exception是java.lang.IllegalArgumentException:不能inheritance最终类class $ Proxy80 由于错误和快速谷歌建议 – 当代理目标是最终类时会发生这种情况。 但是,在这个链中,没有类 – 只有接口。 Spring在运行时生成所有实现。 这是失败的接口的定义: public interface AuthorDAO extends CrossStoreJpaRepository, CrossStoreQueryDslPredicateExecutor { } 注意我正在使用spring的JpaRepository和QueryDslPredicateExecutor的自定义子类,定义如下: public interface CrossStoreJpaRepository extends JpaRepository {} public interface CrossStoreQueryDslPredicateExecutor extends QueryDslPredicateExecutor{} 在其他地方,我在这些接口上定义方法的自定义方面: @Aspect @Component public class DocumentLoadingAspect extends AbstractDocumentAspect { @Around(“execution(* com.mangofactory.crossstore.repository.CrossStore*.find*(..))”) public Object […]

使用AspectJ将一个注释转换为多个注释

我在我的JPA映射中发现了一种我希望编写的模式。 一个简单的例子如下: @OneToMany(fetch=FetchType.EAGER) @Sort(type=SortType.NATURAL) private SortedSet items; 我想创建一个名为SortedOneToMany的注释,我可以应用于上面的集合: public @interface SortedOneToMany { FetchType fetch() default EAGER; SortType sort() default NATURAL; Class comparator() default void.class; } 我写了以下方面,以便在看到我的注释时“附加”JPA注释: public aspect SortedOneToManyAspect { declare @field: @SortedOneToMany * * : @OneToMany(fetch=FetchType.EAGER); declare @field: @SortedOneToMany * * : @Sort(type=SortType.NATURAL); } 但我不知道如何访问SortedOneToMany注释参数的值,并在定义OneToMany和Sort注释时使用它们。 在某些情况下,我可能会更改其中一个默认值,如下所示: @SortedOneToMany(sort=SortType.COMPARATOR,comparator=ItemComparator.class) private SortedSet items; 那么如何将SortedOneToMany中的注释值传递给Sort注释呢?

AspectJ加载时编织签名jar

是否有人成功使用带有签名jar的AspectJ加载时编织? 我有一个例外,不知道如何解决它(使用AspectJ 1.6.8-16.10测试): Exception in thread “main” java.lang.NoClassDefFoundError: com/package/clazz$AjcClosure1 at com.package.test.main(test.java:55) Caused by: java.lang.ClassNotFoundException: com.package.clazz$AjcClosure1 at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source) … 1 more 坦率地说我事件不确定它是否在技术上可行,但我知道类似的问题(使用来自已签名的java类的动态生成的java代码)是为Hibernate项目完成的(即使用Javassist而不是CGLIB)。 细节在这里 。

访问方面类中的类变量

我正在创建一个带有spring aspectj的方面类,如下所示 @Aspect public class AspectDemo { @Pointcut(“execution(* abc.execute(..))”) public void executeMethods() { } @Around(“executeMethods()”) public Object profile(ProceedingJoinPoint pjp) throws Throwable { System.out.println(“Going to call the method.”); Object output = pjp.proceed(); System.out.println(“Method execution completed.”); return output; } } 现在我想访问类abc的属性名称,然后如何在方面类中访问它? 我想在profile方法中显示abc类的name属性 我的abc课程如下 public class abc{ String name; public void setName(String n){ name=n; } public String getName(){ […]