Spring注释@Controller是否与@Service相同?

Spring注释@Controller@Service相同?

我有关于@Controller可以用于URL映射和调用业务逻辑的想法。

@Service用于注释包含业务逻辑的服务类。

我可以使用@Controller而不是@Service来注释Service类吗?

不,他们彼此很不相同。

两者都是@Component注解的不同特化(实际上,它们是同一个接口的两个不同的实现),所以两者都可以通过类path扫描发现(如果你在XMLconfiguration中声明)

服务注解用于服务层,并注释执行服务任务的类,通常你不使用它,但在很多情况下,你使用这个注释来表示最佳实践。 例如,你可以直接调用一个DAO类来将一个对象持久化到你的数据库,但是这太可怕了。 调用一个调用DAO的服务类是非常好的。 这是执行关注模式分离的好事情。

@Controller注解是Spring MVC框架(用于实现Web应用程序的Spring框架的组件)中使用的注释。 @Controller注释表示一个特定的类服务于控制器的angular色。 @Controller批注充当注释类的刻板印象,表明其作用。 调度程序为映射的方法扫描这些带注释的类并检测@RequestMapping注释。

因此,在Spring MVC体系结构中,您有一个DispatcherServlet类(在XMLconfiguration中声明)代表一个前端控制器,将所有HTTP请求分发给相应的控制器类(由@Controller注释)。 这个类通过它的方法执行业务逻辑(并可以调用服务)。 这些类(或其方法)通常还用@RequestMapping注释来注释,该注释指定控制器和其方法处理哪个HTTP请求。

例如:

 @Controller @RequestMapping("/appointments") public class AppointmentsController { private final AppointmentBook appointmentBook; @Autowired public AppointmentsController(AppointmentBook appointmentBook) { this.appointmentBook = appointmentBook; } @RequestMapping(method = RequestMethod.GET) public Map<String, Appointment> get() { return appointmentBook.getAppointmentsForToday(); } 

这个类是一个控制器。

这个类将所有HTTP请求处理为“/约会”“文件夹”,特别是get方法是调用处理所有GET HTTP请求到文件夹“/约会”的方法。

我希望现在对你更清楚。

如果您查看@Controller@Service @Controller注释的定义,则会发现这些是特殊types的@Component注释。

 @Component public @interface Service { …. } 
 @Component public @interface Controller { … } 

那有什么区别?

@Controller

@Controller注释表示一个特定的类服务于控制器的angular色。 @Controller批注充当注释类的刻板印象,表明其作用。

@Controller有什么特别之处?

即使它们看起来相同,也不能使用@Service@Repository等任何其他注释。 调度程序扫描用@Controller注释的类并检测其中的@RequestMapping注释。 您只能在@Controller注释类上使用@RequestMapping


@服务

@Services在仓库层中保存业务逻辑和调用方法。

@Service有什么特别之处?

除了用来表示它拥有业务逻辑的事实外,这个注释并没有明显的特点,但是谁知道,spring可能会在未来增加一些额外的特性。

链接回答: Spring中@Component,@Repository和@Service注释有什么区别?

不, @Controller@Service ,尽pipe它们都是@Component ,使得它们都可以通过类path扫描进行发现。 @Service注释用在你的服务层,而@Controller用于表示层的Spring MVC控制器。 一个@Controller通常会有一个URL映射,并被一个Web请求触发。

@Service vs @Controller

@Service:类是一个“业务服务门面”(在核心J2EE模式的意义上),或类似的东西。

@Controller:表示注释的类是“控制器”(例如Web控制器)。

———-在主要陈规定型中find有用的注释http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/stereotype/Component.html

@interface组件

  @Target(value=TYPE) @Retention(value=RUNTIME) @Documented public @interface Component 

指示注释的类是组件。 当使用基于注释的configuration和类path扫描时,这些类被认为是自动检测的候选对象。

其他类级别的注释也可以被认为是标识一个组件,通常是一种特殊的组件:例如@Repository注解或AspectJ's @Aspect注解。

@interface控制器

 @Target(value=TYPE) @Retention(value=RUNTIME) @Documented @Component public @interface Controller 

表示注释的类是“控制器”(例如Web控制器)。

这个注解作为@Component的一个专门化,允许通过类path扫描来自动检测实现类。 它通常与基于RequestMapping注释的注释处理程序方法结合使用。

@ 界面服务

 @Target(value=TYPE) @Retention(value=RUNTIME) @Documented @Component public @interface Service 

表示注释类是一个“服务”,最初由域驱动devise(Evans,2003)定义为“作为模型中独立的接口提供的操作,没有封装状态”。 也可能表明一个类是“业务服务门面”(在核心J2EE模式意义上)或类似的东西。 这个注释是一个通用的刻板印象,个别团队可能会缩小它们的语义和适当的使用。

这个注解作为@Component的一个专门化,允许通过类path扫描来自动检测实现类。

@interface存储库

 @Target(value=TYPE) @Retention(value=RUNTIME) @Documented @Component public @interface Repository 

指示注释类是“存储库”,最初由Domain-Driven Design(Evans,2003)定义为“封装模拟对象集合的存储,检索和search行为的机制”。 实现诸如“数据访问对象”之类的传统J2EE模式的团队也可以将这种原型应用于DAO类,尽pipe在这样做之前应该注意理解数据访问对象和DDD样式的存储库之间的区别。 这个注释是一个通用的刻板印象,个别团队可能会缩小它们的语义和适当的使用。

当与PersistenceExceptionTranslationPostProcessor一起使用时,注解的类有资格获得Spring DataAccessException转换。 注解的类也在工具,方面等方面阐明了它在整个应用程序体系结构中的angular色。

从Spring 2.5开始,这个注解也可以作为@Component的一个特化,允许通过类path扫描来自动检测实现类。

我已经在这里回答了类似的问题这里是链接

没有两个是不同的。

@Service注释有其他用途,@Controller用于其他用途。 实际上Spring @Component,@Service,@ Repository和@Controller注释被用于在Spring框架中使用类path扫描进行自动Bean检测,但并不意味着所有function都是相同的。 @Service:表示带注释的类是业务层中的Service组件。

@Controller:带注释的类表示它是一个控制器组件,主要用于表示层。

不,你不能和他们不一样。 当应用程序被部署时,你的控制器映射将被作为例子。

为什么你要反正,控制器不是服务,反之亦然。