嗯,我真的不知道为什么这不起作用:
每个需要的罐子都在那里。包括aspectjrt
。
基本上我从配置类开始:
@Configuration
@ComponentScan(basePackages = { "some.path" })
@EnableAspectJAutoProxy
public class SomeConf { ... }
然后我有Aspect
:
@Component
@Aspect
public class ControllerLoggerAspect {
@Pointcut("execution(* some.path.ATest.*(..))")
private void aspectTest() {
System.out.println("\n\n ASPECT WORKING \n\n");
}
}
在some.path
下{我有Atest
课程:
打包some.path;
public class ATest {
public void dummyMethod(){
System.out.println("\n\n\nDummy static executed\n\n\n");
}
}
想象一下,我有控制器:
@Controller
@RequestMapping(value = "/mapping")
public class SomeController {
@RequestMapping(value = "/something")
public ResponseEntity<String> publish(@RequestParam("Id") Long[] ids) {
//aspect should be invoked here
new ATest().dummyMethod();
return new ResponseEntity<>("{ \"status\": \"stubbed\"}", HttpStatus.OK);
}
}
除了方面方法之外,所有内容都被正确调用。没有错误,没有例外,没有。有什么想法吗?
答案 0 :(得分:2)
Spring AOP仅适用于Spring bean,即如果要拦截其中一种方法,则类ATest
必须是@Component
。
答案 1 :(得分:0)
您需要配置要执行的建议。 切入点仅有助于确定连接点。建议将被执行,而不是切入点。
您可以使用切入点&#34; aspectTest()&#34;来编写这样的建议:
@Before("aspectTest()")
public void beforeAdvice(){
System.out.println("\n\n ASPECT WORKING \n\n");
}
或者你可以用示例注释替换示例中的Pointcut注释:
@Before("execution(* some.path.ATest.*(..))")
public void aspectTest() {
System.out.println("\n\n ASPECT WORKING \n\n");
}
这里有一个所有adivces的列表: