Tag: aspectj

了解Spring AOP

我正在使用Spring 3.0框架,仍然是一个新手。 任何人都可以用外行术语解释我的AOP编程是什么? (一个简短的例子肯定会有帮助) Spring如何整合/增强/支持它?

通过Spring AOP + Aspectj进行exception处理

在我的项目中,我有一个域层,它基本上是POJO和一个位于域层顶部的Spring控制器/服务层。 我还有一个位于服务和域之间的AOP层。 我的域层正在抛出业务exception,这些exception现在正在服务层中处理。 但是我想更改它,以便在AOP层中处理从域层抛出的exception。 AOP层会出现某种错误响应并将其发送回Spring控制器/ Web服务层。 我可以创建一个IBizResponse并创建它的两个子类/接口,也许是SuccessResponse和ErrorResponse,并使我的域层方法返回IBizResponse。 但是,我无法弄清楚如何使AOP将ErrorResponse对象返回到服务层。

Spring AOP是否编译编织时间或加载时间编织?

我开始使用Spring AOP进行项目,我对编织有点困惑。 我知道Spring AOP依赖于AspectJweaver.jar,但正如文档所说,这不是编织,而只是它使用了这个jar中的一些类。 但我的问题是,如果没有使用AspectJ进行编织,Spring AOP是否有自己的编织,是在加载时还是编译时执行? 我的Spring配置XML文件的相关部分是:

Aspectj方面用于指定多个包

我想为aspectj @Around方面指定一个包含多个包的模式。 Example : package 1 : aaa.bbb.ccc.ddd package 2 : aaa.bbb.ccc.eee package 3 : aaa.bbb.ccc.eee.fff 我使用的模式: @Around(“execution(* aaa.bbb.ccc.ddd.*.*(..)) && execution(* aaa.bbb.ccc.eee..*.*(..))”) ie Intercept packages aaa.bbb.ccc.ddd, aaa.bbb.ccc.eee and any sub-package of aaa.bbb.ccc.eee 但这种模式似乎不起作用。 虽然指定单个模式没有&&条件有效。 有人可以说这种模式有什么问题吗? 谢谢, Gayathri

AspectJ加载时间weaver不会检测所有类

我在“aspectj”模式下使用Spring的声明式事务(@Transactional注释)。 它在大多数情况下都可以完全像它应该的那样工作,但对于一个它没有。 我们可以称之为Lang (因为这就是它实际上被称为)。 我已经能够确定加载时间织布机的问题。 通过打开aop.xml中的调试和详细日志记录,它列出了所有正在编织的类。 确实没有在日志中提到有问题的Lang类。 然后我在Lang的顶部放置了一个断点,导致Eclipse在加载Lang类时挂起该线程。 当LTW编织其他类时,这个断点被击中! 所以我猜它要么试图编织Lang并且失败并且没有输出,或者其他一些类有一个引用强制它在实际有机会编织它之前加载Lang 。 我不确定如何继续调试这个,因为我无法以较小的规模重现它。 有关如何继续的任何建议? 更新:其他线索也欢迎。 例如,LTW如何实际运作? 似乎有很多魔法发生。 是否有任何选项可以从LTW获得更多的调试输出? 我目前有: 我忘了汤姆之前提到它: spring-agent被用来允许LTW,即InstrumentationLoadTimeWeaver 。 根据安迪克莱门特的建议,我决定检查AspectJ变压器是否甚至通过了这门课程。 我在ClassPreProcessorAgent.transform(..)放了一个断点,看起来Lang类甚至都没有到达那个方法,尽管它和其他类(Jetty的WebAppClassLoader的一个实例)一样被类加载器加载。 然后我继续在InstrumentationLoadTimeWeaver$FilteringClassFileTransformer.transform(..)放置一个断点。 甚至没有一个人被Lang击中。 我相信应该为所有加载的类调用该方法,无论他们使用什么类加载器。 这开始看起来像: 我的调试有问题。 可能是Lang在Eclipse报告时没有加载 Java bug? 牵强附会,但我想它确实发生了。 接下来的线索:我打开了-verbose:class ,看起来好像是Lang过早加载 – 可能是在变换器添加到Instrumentation之前。 奇怪的是,我的Eclipse断点没有捕获到这个加载。 这意味着Spring是新的嫌疑人。 在ConfigurationClassPostProcessor中似乎有一些处理加载类来检查它们。 这可能与我的问题有关。 ConfigurationClassBeanDefinitionReader这些行导致读取Lang类: else if (metadata.isAnnotated(Component.class.getName()) || metadata.hasAnnotatedMethods(Bean.class.getName())) { beanDef.setAttribute(CONFIGURATION_CLASS_ATTRIBUTE, CONFIGURATION_CLASS_LITE); return true; } 特别是, metadata.hasAnnotatedMethods()在类上调用getDeclaredMethods() ,它加载该类中所有方法的所有参数类。 […]

如何使用AspectJ和Tomcat配置加载时编织?

我试着用下一种方式配置加载时织入(用于使用Perf4J进行分析): 1)我将aop.xml添加到META-INF文件夹。 部署时,META-INF放置在工件根目录(即MyAppDeployed/META-INF )中。 2)我将aspectjrt-1.6.1.jar , aspectjweaver-1.6.1.jar , commons-jexl-1.1.jar , commons-logging.jar放到Tomcat/lib文件夹中(起初我尝试了MyAppDeployed/WEB-INF/libs但它也没有用)。 3)我在启动Tomcat时向VM选项添加了-javaagent:C:\apache-tomcat-6.0.33\lib\aspectjweaver-1.6.1.jar 。 4)我的aop.xml : 我没有看到任何迹象表明装载时编织发生。 既没有错误报告也没有必要的结果。 我唯一的错误信息是: Error occurred during initialization of VM agent library failed to init: instrument Error opening zip file: C:\apache-tomcat-6.0.33\lib\wrong-jar.jar 如果我在指定javaagent参数时在aspectjweaver-1.6.1.jar名称中输入错误。 如果写得正确 – 不会打印错误信息。 任何想法,我做错了什么? PS我使用Java 5,我尝试使用1.5.4版本的aspectj完全相同的结果。

Spring AOP:“找不到元素’aop:config’的声明”

我已经看到已经提出了一些这个问题的实例。 但是,我相信我满足这些解决方案中列出的标准。 即我很确定我的课程路径上有所需的jar子+我的计划地址按顺序查看。 一个解决方案提到该问题可能是由类路径上的另一个XML解析器引起的。 我在我的类路径上有dom4j,但我已将其删除以进行测试,问题仍然存在。 这是我的类路径: 这是我的xml: 最后,这是我的stacktrace: Exception in thread “main” org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 15 in XML document from class path resource [spring-aop.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element ‘aop:config’. at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209) at […]

Spring AOP Pointcut不会触发

我是Spring和AOP的新手。 我正在尝试这个简单的事情,我创建了一个自定义注释,在任何方法之前放置应该执行一些代码。 这是我创建的注释 // Declares a custom annotation that validates json @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface JsonSchemaAnnotation { } 接下来,我创建了包含逻辑的Spring Aspect类 @Aspect public class UpdateUIMetadataInterceptor { @Pointcut(“execution(public * com.fico.cardinal.cm.*.*(..))”) public void anyPublicMethod() { System.out.println(“Running”); } @Before(“anyPublicMethod() && @annotation(jsonSchemaAnnotation)”) public void validateJson(ProceedingJoinPoint pjp) throws Throwable { System.out.println(“Running”); } } 这是我的简单测试课程 public class ValidationTest { public static void […]

根据环境变量或属性执行PointCut

我已经开发了一个很好的Spring Aspect ,我可以使用它监视我的服务操作性能。 如果某些操作需要很长时间才能执行,则会记录它们。 @Aspect public class PerformanceMonitorAspect { private Logger logger = LoggerFactory.getLogger(“performance”); @Pointcut(“execution(* com.company.MyService+.*(..))”) public void pointCut(){ } @Around(“pointCut()”) public Object profileServiceMethods(ProceedingJoinPoint thisJoinPoint) throws Throwable { MethodSignature ms = (MethodSignature) thisJoinPoint.getSignature(); Method m = ms.getMethod(); long t1 = System.nanoTime(); Object result = thisJoinPoint.proceed(); long t2 = System.nanoTime(); long millis = TimeUnit.NANOSECONDS.toMillis(t2 – t1); […]

aspectj-maven-plugin,声明soft如何编译

是否可以使用软化的exception编译项目(例如: declare soft: Exception : execution(* *.*()); )只使用aspectj-maven-plugin中的方面? 我无法处理它……我仍然遇到编译错误 unreported exception Exception; must be caught or declared to be thrown 因此编译时不考虑方面。 我正在使用此命令编译: mvn clean aspectj:compile 我的pom.xml是: 4.0.0 pl.group.id aop 1.0.0 org.aspectj aspectjrt 1.7.4 org.apache.maven.plugins maven-compiler-plugin 3.1 org.codehaus.mojo aspectj-maven-plugin 1.6 1.7 1.7 1.7 src/main/aspect compile test-compile 我究竟做错了什么?