我使用的是aspectj的weaving而不是SpringAOP,因此我的aspectj maven插件如下所示:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<configuration>
<Xlint>ignore</Xlint>
<showWeaveInfo>true</showWeaveInfo>
<source>${java.version}</source>
<target>${java.version}</target>
<complianceLevel>${org.aspectj-version}</complianceLevel>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
</plugin>
我还有另一个方面看起来是这样的:
package com.mycompany.fw.app.config;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclarePrecedence;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.ParameterNameDiscoverer;
import org.springframework.security.core.parameters.DefaultSecurityParameterNameDiscoverer;
import com.mycompany.fw.security.Integration;
@Aspect
@DeclarePrecedence("IntegrationAspects*,*")
public class IntegrationAspects {
ParameterNameDiscoverer parameterNameDiscoverer = new DefaultSecurityParameterNameDiscoverer();
@Pointcut("(execution(* com.mycompany..*(..))) && @annotation(integrate) ")
public void integratePointCut(Integration integrate) {
}
/**
* TODO: cache
*
* @param jp
* @param integrate
* @throws Throwable
*/
@Around("integratePointCut(integrate)")
public Object integrate(final ProceedingJoinPoint pjp, Integration integrate) throws Throwable {
Object res = pjp.proceed();
return res;
}
}
我需要的是把上面的(集成方面)放在任何其他方面(包括Spring的安全方面)之前,正如您所看到的,我用@declareprection
尝试过(我也用declare precence:integrationAspects*,*
在.aj文件中尝试过),不幸的是,没有成功。
问题是您没有在@declarePrection
中使用简单的方面名称IntegrationAspects
,而是使用了一个开玩笑的字符*
。在这种情况下,您需要使用一个完全限定的类名或创建相同的jokers。
不工作:
@DeclarePrecedence("IntegrationAspects*, *")
作品:
@DeclarePrecedence("IntegrationAspects, *")
@DeclarePrecedence("com.mycompany.fw.security.Integration.IntegrationAspects, *")
@DeclarePrecedence("com.mycompany.fw.security.Integration.IntegrationAspects*, *")
@DeclarePrecedence("*..IntegrationAspects*, *")
我的建议是正确执行并预先准备正确的操作,除了执行两次。我希望它只执行一次。应该触发通知的方法只执行一次,因为startTestSuite标题只在日志中打印一次。bean和上下文是在TestNG类中生成的。我尝试在initSpring()方法上使用@beforeClass和@beforeSuite标记运行它,结果相同。 进一步的上下文:这样做的目的是获取测试套件何时开始和结束的时间戳,以及各个测试何
我已经用原始切入点和建议方法编写了简单方面: 我有以下基于Spring注释的应用程序配置: 和com中的实用程序类。mtag。util包: 但是当我打电话的时候 在单元测试中,我可以看到方法调用没有被拦截,我的@AfterResning建议不起作用。 但如果我将someMethod()类型更改为实例(非静态)方法,则切入点为 通过添加@Component注释和调用目标metod来管理Spring的
当我设置Spring Ashej加载时间编织并通过关键字创建一个实例时,如下所示(下图)。事实证明,我无法访问构造函数中的依赖项。正如预期的那样,这一切都很好。执行顺序是 。现在,我可以访问构造函数中的依赖项。但问题是执行顺序:
问题内容: 我有一个抽象基类,用作我的单元测试(TestNG 5.10)的基础。在该类中,我将初始化测试的整个环境,设置数据库映射等。此抽象类具有一个带有注释的方法,该方法可以进行初始化。 接下来,我用具有方法和方法的特定类扩展该类。这些方法对环境进行类特定的初始化(例如,将一些记录放入数据库中)。 如何执行带注释的方法的特定顺序?我需要先执行抽象基类中的那些,然后再执行扩展类中的那些。 例: 预
本文向大家介绍setTimeout和Promise的执行顺序?相关面试题,主要包含被问及setTimeout和Promise的执行顺序?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 首先我们来看这样一道题: 输出答案为2 10 3 5 4 1 要先弄清楚settimeout(fun,0)何时执行,promise何时执行,then何时执行 settimeout这种异步操作的回调,只有主线程
我正在使用SpringAOP创建一个方面。我定义的方面将执行两次。我似乎不明白为什么。我非常感谢任何人对这个问题的意见。 谢谢 //Spring配置 //建议 //建议的方法 //输出 //编辑1:添加了更多的spring配置信息。根本不使用任何Spring AOP注释。我附加了一个调试器,看到aspect/log语句也被执行了两次。所以我怀疑它是否与日志语句打印字符串两次有关。