如何在类上注释时对每个方法进行注释,例如@ResponseBody

时间:2018-05-08 10:10:28

标签: java annotations

我想写一个像@ResponseBody这样的注释,在类上使用它可以处理每个方法。所以我想知道如何实施。

1 个答案:

答案 0 :(得分:2)

类级别注释如何应用于所有方法,并非特定于@ResponseBody注释,它适用于所有此类注释,例如@Transactional。在使用注释编译代码时,编译器会运行相应的注释处理器(已对该特定注释表现出兴趣)。注释处理器通常使用反射来检查正在编译的元素。处理器可以在最终编译之前简单地对代码片段/方法运行检查,修改它们或生成新代码。这可能包括修改该类的所有方法。有关在类级别实现自定义注释的示例,请参阅http://mkyong.com/java/java-custom-annotations-example

来到@ResponseBody:

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/ResponseBody.html指出,从版本4.0开始,@ResponseBody注释也可以添加到类型级别,在这种情况下它是继承的,不需要在方法级别添加。

@ResponseBody如何运作:

如果使用@ResponseBody注释方法(或封装类),spring将尝试转换方法的返回值并自动将其写入http响应。

根据您的配置,spring有一个在后台注册的HttpMessageConverters列表。 HttpMessageConverter的职责是将方法返回值转换为HTTP响应主体,具体取决于预定义的mime类型。

每次发出请求命中@ResponseBody注释时,spring会遍历所有已注册的HttpMessageConverters,寻找适合给定mime类型和类的第一个,然后将其用于实际转换。