Tag: aspectj

aspectj:如何将库中的方面编织成用户代码?

我有一个包含一些类和几个方面的库。 Say AspectedLib.jar是包含此类定义的文件(在eclipse中创建,带有“带有aspectj支持的导出jar文件”)。 如果我导入AspectedLib.jar文件,甚至使用其中定义的某些类,它可以工作,但没有触发任何连接点,即不执行方面。 我怎样才能做到这一点? 理想情况下,我如何在eclipse *中设置它? *版本:Juno Service Release 2; 构建ID:20130225-0426

Struts 2 ModelDriven Action如何从beaing更新中排除某些属性

我们正在使用ModelDriven接口的动作。 该操作具有scopedModelDriven拦截器,我们将模型保存在会话中。 模型如下: public class Fundtransfer{ private String amount; private String sourceAccount; private String destinationAccount; private String sign //setter’s and getter’s ommited } Fundtransfer bean用作模型。 JSP表单有amount, sourceAcount和destinationAcount字段,它们通过modelDriven拦截器自动映射到Fundtransfer bean。 听到之前一切都很正常! 当然,用户可以简单地践踏HTML表单并将一个名为sign的变量传递给action,拦截器会将其更新为bean。 是否有可能我们可以通过ModelDriven拦截器无法更新符号值。 我知道我可以创建一个新bean,然后将其复制到Fundtransfer bean或使用某种inheritance。 有没有更好的方法。 我们使用的真正的bean是巨大的,还有一些嵌套的bean。 我想可能是我可以使用一些方面的技巧,但我不知道是否可能?

使用AspectJ的Spring MVC

我有一个工作的spring mvc项目。 我想使用AspectJ通过我的控制器记录每个请求。 相关代码: 控制器:(在hu.freetime.controller包中) @Controller @RequestMapping(“/”) public class BaseControllerImpl { @RequestMapping(method = RequestMethod.GET) public String index(Model model) { return “index”; } } 方面: @Aspect public class ControllerAspectImpl { Logger logger = LoggerFactory.getLogger(ControllerAspectImpl.class); @Pointcut(“execution(public * hu.freetime.controller.BaseControllerImpl.*(..))”) public void logController() { } @Around(“logController()”) public void log(final ProceedingJoinPoint pjp) { MethodSignature signature = (MethodSignature) pjp.getSignature(); Method method […]

AspectJ建议不会在Maven多模块设置中触发

我正在尝试使用Aspectj进行AOP,但我不知道为什么不执行我的方面,它只运行主类。 这是我第一次这样做,所以我可能做错了什么。 这是我的代码: 方面: @Aspect public class YourAspect { @Pointcut(“@annotation(yourAnnotationVariableName)”) public void annotationPointCutDefinition(YourAnnotation yourAnnotationVariableName){ } @Pointcut(“execution(* *(..))”) public void atExecution(){} @Around(“annotationPointCutDefinition(yourAnnotationVariableName) && atExecution()”) public Object aroundAdvice(ProceedingJoinPoint joinPoint, YourAnnotation yourAnnotationVariableName) throws Throwable { if(yourAnnotationVariableName.isRun()) { Object returnObject = null; try { System.out.println(“aspects.YourAspect’s aroundAdvice’s body is now executed Before yourMethodAround is called.”); returnObject = joinPoint.proceed(); } catch […]

AspectJ的集成测试

我正在尝试为Custom Aspect编写Integratation测试。 这是Aspect Class Snippet。 @Aspect @Component public class SampleAspect { private static Logger log = LoggerFactory.getLogger(SampleAspect.class); private int count; public int getCount(){ return count; } public void setCount(){ this.count= count; } @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”); setCount(1); return point.proceed(); } } 因此,只要关节点与切入点匹配,上述方面就会截获。 它的工作正常。 […]

AspectJ – 使用预编译方面编译Java源代码

假设我有几个方面,我已经编译过了,现在我只想编译单个源文件,但不需要重新编译方面,因为它需要花费很多时间。 有没有办法这样做? 例如,我有以下内容: Trace.aj Log.aj Test.java 所有这些都是在我的“build-all”中编译的,现在我已经改变了Test.java并希望使用(已编译的)方面重新编译它。

如何在aspectJ中排除getter和setter?

我在我的maven项目中有一个类aspectJ,它让我在项目中显示任何被调用方法的Begin和End。 我现在尝试排除所有的getter和setter。 我尝试修改这个注释: @Around(“execution(public * *(..)) by @Around(“execution(public * *(..) && !within(* set*(..))”) 但它没有whork,它给了我在consol: [ERROR] Failed to execute goal org.codehaus.mojo:aspectj-maven-plugin:1.7:compile (default) on project spb-lceb: AJC compiler errors: [ERROR] error at @Around(“execution(public * *(..) && !within(* set*(..))”) Syntax error on token “execution(public * *(..) && !within(* set*(..))”, “)” expected 任何的想法

使用javareflection在scala中获取具有特定注释的方法参数

我使用aspectj在scala使用aop。 我有一个方法 def delete(@Id id:Long, name:String) 如何在Aspect文件中获取id的值。 @Around(“execution (* com.myapp.Employee.delete(..))”) def message(joinPoint: ProceedingJoinPoint): Object = { val methodSignature =joinPoint.getSignature.asInstanceOf[MethodSignature] //get the value of the field id joinPoint.proceed } 我无法获得价值。 如果我试试 val res = methodSignature.getMethod.getParameterAnnotations res.map(annotations => println(“size = “+annotations.length)) 始终将大小打印为0。 编辑:现在我正确的大小。 该方法是object 。 但我认为javareflection读取object存在一些问题。 我换了class ,现在能够得到注释。 但是,如何获取使用该注释注释的参数?

使用java.lang.reflection的构造函数的AspectJ切入点

以下示例是减少真正的问题,因为它尽可能地尝试简化。 我有一个java接口,以及几个实现该接口的对象,如: public interface Shape{ public void draw(); public void erase(); public boolean isDrawn(); } public class Square implements Shape{ @Override public void draw(){ //TODO: method implementation } @Override public void erase(){ //TODO: method implementation } Override public boolean isDrawn(){ //TODO: method implementation return false; } } public Triangle implements Shape{ //same as above } […]

@AspectJ。 scala(可能是java)lambdas的切入点

scala lambdas有可能有poitcut吗? 如果我没有弄错scala lambdas现在编译方式与java lambdas相同,所以我认为我的问题也适用于java lambdas,但我不确定。 这是代码。 基本上我想建议Runnable实例。 如果我使用类或匿名类,它可以很好地工作,但是如果我使用lambdas则它不起作用。 @Around(“execution(* (com.test..* && java.lang.Runnable+).run())”) def runnableAspect(pjp: ProceedingJoinPoint): Any = { println(“Runnable caught”) pjp.proceed() } 这是测试代码: package com.test class Greet { def hello(): Unit = { println(“—–start——–“) run(new Runnable { override def run(): Unit = println(“anonymous class”) }) println(“——————“) run(() => println(“lambda”)) println(“—–end——–“) } private def run(r: […]