Spring MVC中的注释与标记接口

时间:2012-12-11 19:25:39

标签: spring java-ee interface annotations

你更喜欢哪个?在spring mvc中,他们对所有@Controller类使用Controller。他们可以使用一些标记界面吗?他们为什么选择注释方法? 更好的是,它们可以具有类似于controller-scan的类似component-scan的内容,因此可以将包中的任何类假定为Controller类。同样,service-scanrepository-scan可以在xml中定义。

2 个答案:

答案 0 :(得分:7)

我认为技术上标记界面可以产生相同的效果。问题是标记接口仅限于类,不能用于属性或方法。

Spring正在使用注释将元数据添加到属性(例如@Autowired)或方法(例如@RequestMapping@Transactional)。因此,使用相同的方法将元数据添加到类(例如@Controller@Service

是一致的

请注意,Spring不会强制您使用提供的注释。 @Controller@RequestMapping只是定义处理程序映射的默认方式。从理论上讲,您可以采用自己的方式将传入的请求映射到方法调用。

答案 1 :(得分:3)

他们最初都服务于同一目的;标记和发现某事。

注释是为了更直接地标记。标记接口实际上定义了一个类型,但是当你声明一个所述类型的变量时,你无法用它做任何事情。注释不会创建类型,而是由处理注释的代码来赋予它意义。

最终这是一个品味问题。

注释确实具有能够存储其他元数据的优势。和@Named一样(" foo")。标记界面的优点是您可以创建集合,以确保所有项目都具有标记接口。例如。没有约束表示泛型或变量类型应该具有特定的注释。

对于接口中方法与方法的注释,接口中的方法需要实现的问题(在Java 8中不再严格要求这样做)使类快速笨重,而注释可以更容易应用点菜,但编译器不能强制执行正确的方法签名。这意味着某些注释需要一个方法签名,例如void foo(Bar bar),但是这个事实必须在docs中查找(如果有的话)。