@Around建议不与Controller一起使用。 @ Before,@ After等工作没有错误

时间:2016-07-27 14:48:47

标签: spring-aop

我正在尝试使用记录器类在我的休息控制器周围使用Around方法。我得到输出"在调用Controller"之前,"在调用控制器"之后等等,但我的邮递员没有得到任何退货结果。

使用@Before方法和@After。

可以正常运行

ReST控制器看起来像这样。

@RestController("/")
public class DummyController {  

@RequestMapping(value="hello",method=RequestMethod.GET)
public String dummyMethod() {
    System.out.println("In Controller...");
    return "Hello There";
    }
}

这是Aspect类。

@Aspect
@Component
public class Logger {

    @Around("within(DummyController)")//Around Not working....
    public void printMessage(ProceedingJoinPoint p) throws Throwable 
    {
        System.out.println("Before Calling Method...");
        p.proceed();
        System.out.println("After calling method...");
    }

bean配置如下:

<mvc:annotation-driven />
<context:annotation-config></context:annotation-config>
<context:component-scan base-package="com.aop.test">  </context:component-scan>

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>

我的输出是:

Before Calling Method...
In Controller...
After calling method...

But the webservice output is blank in postman instead of "Hello There". The status is "200 OK"
The code works as expected with other Advices like @Before,@After...

关于代码出错的指针?

先谢谢..

1 个答案:

答案 0 :(得分:1)

将您的观点更改为下方,它应该可以正常工作。

@Aspect
@Component
public class Logger {

    @Around("within(DummyController)")//Around Not working....
    public Object printMessage(ProceedingJoinPoint p) throws Throwable 
    {
        System.out.println("Before Calling Method...");
        Object result =  p.proceed();
        System.out.println("After calling method...");

        return result;
    }

请注意,我建议返回ProceedingJoinPoint返回的对象