我想写一个像@ResponseBody
这样的注释,在类上使用它可以处理每个方法。所以我想知道如何实施。
答案 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类型和类的第一个,然后将其用于实际转换。