我有一些服务类,它们扩展了带有@Annotation1注解的BaseService类。在@Annotation1中还有另一个注释-@Annotation2。
我希望能够创建aspect方法,它在用@Annotation2注释的类中的所有方法之前运行,所以在任何扩展BaseService类的服务中都是如此。
当我直接在BaseService中应用@AnNotation2时,我可以运行方面方法,或者当我直接在服务上应用@AnNotation1时,但当@AnNotation2在扩展类中的@AnNotation1中时,我就不能运行方面方法
@Annotation1
abstract class BaseService {
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
@Annotation2
public @interface Annotation1 {
}
@Target(value = {ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface Annotation2 {
}
public class TestService extends BaseService {
private void testMethod(){
// does some service task
}
}
@Aspect
public class TestAspect {
@Before("@within(com.example.Annotation2) ||" +
" within(@(@com.example.Annotation2 *)*)" +
" @annotation(com.example.Annotation2)")
public void aspectMethod(JoinPoint joinPoint) {
// should run before testMethod
}
}
Aspect方法aspectMethod()应在TestService中的testMethod()之前运行,但不会。
根据我的另一个回答,我本以为这样的一个方面会起作用:
package de.scrum_master.aspect;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class TestAspect {
@Before(
"execution(* *(..)) && (" +
"within(@de.scrum_master.app.Annotation2 *) || " +
"within(@(@de.scrum_master.app.Annotation2 *) *) || " +
"within(@(@(@de.scrum_master.app.Annotation2 *) *) *)" +
")"
)
public void myAdvice1(JoinPoint joinPoint) {
System.out.println(joinPoint);
}
}
不幸的是,它没有,这似乎是一个AEX J限制。我为它创建了Bugzilla票证#549437,您可能想要遵循。
解决方法:直接注释TestService
。
对于用@X注释的类中的方法或用@X注释的方法,我需要一个切入点。我还需要注释对象。如果类和方法都被注释,我更喜欢将方法注释作为参数。 我尝试了以下操作,这会产生“绑定不一致”的警告。(为什么不直接将其设置为null?) 以下内容创建了“穿过切入点中的“||”的参数x的不明确绑定”警告。(在我看来,这不一定有意义:为什么不绑定第一个短路评估?) 如果存在类和方法注释,则将前面的尝试拆分为两个,自然会
如何使一个方面以属于用特定注释标记的类的所有公共方法为目标?在下面的method1()和method2()应该由方面处理,method3()不应该由方面处理。 如果我将注释放在方法级别,这方面将工作并匹配方法调用。 } 我正在使用Spring和基于代理的方面。
问题内容: 我需要 在类中使用@X注释的方法或使用@X注释的方法的切入点 。我还 需要注释对象 。如果同时注释了类和方法,则 我更喜欢将方法注释作为参数 。 我尝试了以下操作,这将创建“不一致的绑定”警告。(为什么不将它们设置为null?) 下面创建“跨’||’的参数x的模糊绑定 在切入点”警告。(我认为这并不一定有意义:为什么不绑定第一个短路评估?) 如果存在类和方法注释,则将先前的尝试自然地分
我有以下问题: 我已经为安全性创建了注释: 在我具有类之间的继承性的情况下,是否也有可能所有类都具有@Security注释来获得最具体的定义? 约西
问题内容: 我在Service类中看到了一种被标记为的方法,但是它也在同一类中调用了其他未标为的方法。 这是否意味着对单独方法的调用导致应用程序打开与DB的单独连接或暂停父事务等? 不带任何注释的方法的默认行为是什么,而另一个带有注释的方法调用该方法的默认行为是什么? 问题答案: 当你调用没有事务块之内的方法时,父事务将继续使用新方法。它将使用与父方法(with )相同的连接,以及在调用的方法中导