Spring 方面 (AspectJ) 似乎不起作用
Spring Aspects (AspectJ) does not seem to work
嗯,我真的不知道为什么这不起作用:
所需的每个罐子都已到位。包括aspectjrt
。
基本上我从配置 class:
开始
@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
class:
包 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);
}
}
除方面方法外,一切都被正确调用。没有错误,没有异常,什么都没有。有什么想法吗?
您需要配置要执行的建议。 切入点 仅有助于确定连接点。将执行建议,而不是切入点。
您可以使用切入点编写这样的建议 "aspectTest()":
@Before("aspectTest()")
public void beforeAdvice(){
System.out.println("\n\n ASPECT WORKING \n\n");
}
或者您可以将示例中的切入点注释替换为这样的建议注释:
@Before("execution(* some.path.ATest.*(..))")
public void aspectTest() {
System.out.println("\n\n ASPECT WORKING \n\n");
}
这里有所有建议的列表:
- @之前("aspectTest()")
- @After("aspectTest()")
- @AfterReturning(切入点="aspectTest()",返回="retVal")
- @AfterThrowing(切入点="aspectTest()",投掷="ex")
- @Around("aspectTest()")
Spring AOP 仅适用于 Spring beans,即如果你想拦截它的方法之一,class ATest
需要是 @Component
.
嗯,我真的不知道为什么这不起作用:
所需的每个罐子都已到位。包括aspectjrt
。
基本上我从配置 class:
@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
class:
包 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);
}
}
除方面方法外,一切都被正确调用。没有错误,没有异常,什么都没有。有什么想法吗?
您需要配置要执行的建议。 切入点 仅有助于确定连接点。将执行建议,而不是切入点。
您可以使用切入点编写这样的建议 "aspectTest()":
@Before("aspectTest()")
public void beforeAdvice(){
System.out.println("\n\n ASPECT WORKING \n\n");
}
或者您可以将示例中的切入点注释替换为这样的建议注释:
@Before("execution(* some.path.ATest.*(..))")
public void aspectTest() {
System.out.println("\n\n ASPECT WORKING \n\n");
}
这里有所有建议的列表:
- @之前("aspectTest()")
- @After("aspectTest()")
- @AfterReturning(切入点="aspectTest()",返回="retVal")
- @AfterThrowing(切入点="aspectTest()",投掷="ex")
- @Around("aspectTest()")
Spring AOP 仅适用于 Spring beans,即如果你想拦截它的方法之一,class ATest
需要是 @Component
.