是春天注解@Controller
一样@Service
?
我有想法@Controller
可用于URL
映射和调用业务逻辑。
而@Service
用来注解包含业务逻辑服务类。
我可以使用@Controller
而不是@Service
注释服务类?
是春天注解@Controller
一样@Service
?
我有想法@Controller
可用于URL
映射和调用业务逻辑。
而@Service
用来注解包含业务逻辑服务类。
我可以使用@Controller
而不是@Service
注释服务类?
不,他们是彼此非常不同。
两者都是@Component注释的不同专业(在实践中,它们是相同的接口的两种不同的实现),这样既可以通过类路径扫描发现(如果你在你的XML配置声明它)
@Service注解是在服务层使用和诠释执行服务任务,往往你不使用它的类,但在很多情况下,你使用此批注来表示最佳实践。 例如,你可以直接调用DAO类持久化对象到数据库,但是这是可怕的。 这是相当不错的调用,调用一个DAO服务类。 这是执行的担忧模式的分离是一件好事。
注解@Controller是Spring MVC框架(Spring框架的组件来实现Web应用程序)使用的注解。 该注解@Controller表明特定类供应控制器的作用。 该注解@Controller充当注解类刻板印象,这表明它的作用。 调度器将扫描映射方法例如注解的类和检测@RequestMapping注释。
所以,看你有一个的DispatcherServlet类(您在XML配置声明),它表示对派遣适当的控制器类中的所有HTTP请求(由@Controller的)前端控制器的Spring MVC架构。 这个类执行业务逻辑(并且可以调用服务)通过它的方法。 这些类(或它的方法)通常与指定哪些HTTP请求由控制器和通过其方法处理@RequestMapping注解也。
例如:
@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
注解,那么你会发现,这些特殊类型的@Component
注释。
@Component
public @interface Service {
….
}
@Component
public @interface Controller {
…
}
那么,有什么区别?
@Controller
该@Controller
注解表明特定类供应控制器的作用。 该@Controller
注解充当注解类刻板印象,这表明它的作用。
有什么特别@Controller?
你可以不与任何其他像关掉这个注解@Service
或@Repository
,即使他们看起来一样。 调度员扫描带注释的类@Controller
和检测@RequestMapping
在其中的注释。 您只能使用@RequestMapping
上@Controller
注解类。
@服务
@Services
保持业务逻辑和调用方法库层。
有什么特别的@服务?
除此之外,它是用来表明它的控股业务逻辑的事实,有这个注解提供没有明显的特色,但谁知道,春天可能会增加一些额外的特殊的未来。
链接答案: 是什么在春季@Component,@Repository和@Service注释之间的区别?
不, @Controller
是不一样的@Service
,虽然他们无一不是特@Component
,使他们通过类路径扫描发现两位候选人。 该@Service
注解是在服务层使用, @Controller
是在表示层Spring MVC控制器。 一个@Controller
通常会有一个URL映射,并通过一个Web请求被触发。
@Service VS @Controller
@Service:类是“企业服务门面”(在Core J2EE模式的意义上),或者类似的东西。
@Controller:表示一个注解的类是“控制器”(例如一个网络控制器)。
----------查找主要定型有用的笔记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
表明一个注解的类是一个组件。 这种类是使用基于注解的配置和类路径扫描时认为是用于自动检测的候选者。
@interface控制器
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Controller
表明一个注解的类是“控制器”(例如一个网络控制器)。
@ 接口服务
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Service
表示一个注解类是“服务”,最初是由领域驱动设计(埃文斯,2003)定义为“为单独矗立在模型中,没有封装状态的接口提供一种操作。” ,也可以表示一类是“企业服务门面”(在Core J2EE模式的意义上),或者类似的东西。 此注解是一个通用的刻板印象和个人的团队可能缩小它们的语义并酌情使用。
@interface库
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Repository
表示一个注解类是“库”,最初是由领域驱动设计(埃文斯,2003)定义为“用于封装存储,检索机制和搜索行为,模拟对象的集合”。 实施传统的J2EE模式,如“数据访问对象”团队还可以将此构造型DAO类,但应注意在这样做之前要了解数据访问对象和DDD风格的存储库之间的区别。 此注解是一个通用的刻板印象和个人的团队可能缩小它们的语义并酌情使用。
与PersistenceExceptionTranslationPostProcessor一起使用时从而注释一类可享有弹簧DataAccessException的翻译。 被注解类也被明确为它的整体应用架构角色的工具,方面等目的
在Spring 2.5中,这个注释也作为@Component的专业化,允许实现类通过使用classpath扫描来自动检测。
我已经回答了类似的问题在这里这里是链接
没有这两个是不同的。
@Service注解有其他目的使用和@Controller用于其他。 其实春天@Component,@Service,@Repository和@Controller注解用于使用类路径扫描在Spring框架的自动检测豆,但它并没有,意味着所有的功能都是一样的。 @Service:表示注释的类是在业务层上的服务组件。
@Controller:注释类指示它是一个控制器组件,主要用于在表示层。
不,你不能,他们是不同的。 当应用程序部署控制器映射将受损害的例子。
你为什么想反正控制器不是服务,反之亦然。
从春天在行动
正如你所看到的,这个类都被注解@Controller。 就其本身而言,@Controller并没有做太多。 其主要目的是确定这类作为成分扫描的部件。 由于HomeController中与@Controller的,Spring的组件扫描自动发现并创建的HomeController的实例作为Spring应用程序上下文的bean。
事实上,其他注释(包括@Component,@Service和@Repository)的少数起到类似@Controller目的。 你干嘛不直接与任何其他的那些注释为有效注释HomeController中,它会仍然工作是相同的。 @Controller的选择,然而,更多描述的这个组件的应用程序中的作用。