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:带注释的类表示它是一个控制器组件,主要用于表示层。
不,你不能和他们不一样。 当应用程序被部署时,你的控制器映射将被作为例子。
为什么你要反正,控制器不是服务,反之亦然。