복붙노트

[SPRING] Spring 어노테이션 @Controller는 @Service와 같은가요?

SPRING

Spring 어노테이션 @Controller는 @Service와 같은가요?

Spring 어노테이션 @Controller는 @Service와 같은가요?

URL 매핑 및 비즈니스 로직 호출에 사용할 수있는 @Controller에 대한 아이디어가 있습니다.

@Service는 비즈니스 로직을 포함하는 서비스 클래스에 주석을다는 데 사용됩니다.

서비스 클래스에 주석을 달기 위해 @Service 대신 @Controller를 사용할 수 있습니까?

해결법

  1. ==============================

    1.아니, 그들은 서로 아주 다르다.

    아니, 그들은 서로 아주 다르다.

    둘 다 @Component 어노테이션의 다른 전문 분야입니다 (실제로는 두 인터페이스가 서로 다른 구현 임). 클래스 경로 검색을 통해 두 요소를 모두 찾을 수 있습니다 (XML 구성에서 선언 한 경우)

    @Service 주석은 서비스 계층에서 사용되며 서비스 작업을 수행하는 클래스에 주석을 추가합니다. 자주 사용하지 않지만 대부분의 경우이 주석을 사용하여 모범 사례를 나타냅니다. 예를 들어, DAO 클래스를 직접 호출하여 데이터베이스에 객체를 유지할 수 있지만 이것은 끔찍한 일입니다. DAO를 호출하는 서비스 클래스를 호출하는 것이 좋습니다. 관심 패턴의 분리를 수행하는 것이 좋습니다.

    @Controller annotation은 Spring MVC 프레임 워크 (웹 애플리케이션 구현에 사용되는 Spring Framework의 구성 요소)에서 사용되는 주석이다. @Controller 어노테이션은 특정 클래스가 컨트롤러 역할을 수행함을 나타냅니다. @Controller 어노테이션은 어노테이션이 적용된 클래스의 스테레오 타입 역할을하며 역할을 나타냅니다. 디스패처는 매핑 된 메서드에 대해 주석이 달린 클래스를 검색하고 @RequestMapping 주석을 검색합니다.

    따라서 스프링 MVC 아키텍처를 살펴보면 모든 HTTP 요청을 적절한 컨트롤러 클래스 (@Controller에 의해 주석 첨부 됨)로 전달하는 프론트 컨트롤러를 나타내는 DispatcherServlet 클래스 (XML 구성에서 선언)가있다. 이 클래스는 메서드를 사용하여 비즈니스 논리를 수행하고 서비스를 호출 할 수 있습니다. 이러한 클래스 (또는 그 메소드)는 일반적으로 @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();
        }
    

    이 클래스는 컨트롤러입니다.

    이 클래스는 "/ appointments" "폴더"에 대한 모든 HTTP 요청을 처리하며 특히 get 메서드는 "/ appointments"폴더에 대한 모든 GET HTTP 요청을 처리하기 위해 호출되는 메서드입니다.

    나는 이제 그것이 당신에게 더 분명하기를 희망합니다.

  2. ==============================

    2.@Controller, @Service 주석의 정의를 살펴보면 이러한 요소가 @Component 주석의 특수한 유형이라는 것을 알 수 있습니다.

    @Controller, @Service 주석의 정의를 살펴보면 이러한 요소가 @Component 주석의 특수한 유형이라는 것을 알 수 있습니다.

    @Component
    public @interface Service {
        ….
    }
    

     

    @Component
    public @interface Controller {
        …
    }
    

    차이점은 무엇입니까?

    @Controller 어노테이션은 특정 클래스가 컨트롤러 역할을 수행함을 나타냅니다. @Controller 어노테이션은 어노테이션이 적용된 클래스의 스테레오 타입 역할을하며 역할을 나타냅니다.

    @Controller의 특별한 점은 무엇입니까?

    이 주석은 @Service 또는 @Repository와 같이 다른 것으로 전환 할 수 없습니다. 디스패처는 @Controller로 주석 된 클래스를 스캔하고 그 안에 @RequestMapping 주석을 감지합니다. @Controller 주석이 달린 클래스에서만 @RequestMapping을 사용할 수 있습니다.

    @Services는 리포지토리 계층에서 비즈니스 논리 및 호출 메서드를 보유합니다.

    @Service의 특별한 점은 무엇입니까?

    비즈니스 논리를 유지한다는 것을 나타내는 데 사용된다는 것 외에도,이 주석이 제공하는 눈에 띄는 전문 분야는 없지만 앞으로 봄에 예외적으로 추가 될 수 있습니다.

    Linked answer : Spring의 @Component, @Repository & @Service 주석의 차이점은 무엇입니까?

  3. ==============================

    3.아니요, @Controller는 @Component의 전문 분야이기는하지만 @Service와 같지 않습니다. 클래스 경로 검색을 통해 두 후보를 모두 찾을 수 있습니다. @Service 주석은 서비스 계층에서 사용되고 @Controller는 프레젠테이션 계층에서 Spring MVC 컨트롤러 용입니다. @Controller는 일반적으로 URL 매핑을 가지며 웹 요청에 의해 트리거됩니다.

    아니요, @Controller는 @Component의 전문 분야이기는하지만 @Service와 같지 않습니다. 클래스 경로 검색을 통해 두 후보를 모두 찾을 수 있습니다. @Service 주석은 서비스 계층에서 사용되고 @Controller는 프레젠테이션 계층에서 Spring MVC 컨트롤러 용입니다. @Controller는 일반적으로 URL 매핑을 가지며 웹 요청에 의해 트리거됩니다.

  4. ==============================

    4.@Service 대 @Controller

    @Service 대 @Controller

    @Service : 클래스는 (핵심 J2EE 패턴에서) "Business Service Facade"또는 유사한 것입니다.

    @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
    

    주석이 달린 클래스가 "컨트롤러"(예 : 웹 컨트롤러)임을 나타냅니다.

    @interface 서비스

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

    주석이 첨부 된 클래스가 원래 도메인 중심 디자인 (Evans, 2003)에 의해 ""캡슐화 된 상태가 아닌 모델에 단독으로 존재하는 인터페이스로 제공되는 작업 "으로 정의 된"서비스 "임을 나타냅니다. 또한 클래스가 "J2EE 패턴"이라는 의미의 "비즈니스 서비스 외관"또는 이와 유사한 것임을 나타낼 수도 있습니다. 이 주석은 범용 스테레오 타입이며 개별 팀은 의미를 좁히고 적절하게 사용할 수 있습니다.

    @interface 저장소

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

    주석이 첨부 된 클래스가 원래 Domain-Driven Design (Evans, 2003)에 의해 "개체 컬렉션을 에뮬레이트하는 저장소, 검색 및 검색 동작을 캡슐화하기위한 메커니즘"으로 정의 된 "저장소"임을 나타냅니다. "데이터 액세스 개체"와 같은 전통적인 J2EE 패턴을 구현하는 팀은 DAO 클래스에도이 스테레오 타입을 적용 할 수 있습니다. 그러나 데이터 액세스 개체와 DDD 스타일 리포지토리 간의 차이점을 이해해야합니다. 이 주석은 범용 스테레오 타입이며 개별 팀은 의미를 좁히고 적절하게 사용할 수 있습니다.

    따라서 Annotated 클래스는 PersistenceExceptionTranslationPostProcessor와 함께 사용될 때 Spring DataAccessException 변환에 적합합니다. 어노테이션이 추가 된 클래스는 툴링, 애스펙트 등을 목적으로하는 전반적인 애플리케이션 아키텍처에서의 역할에 대해서도 명확하게 설명됩니다.

    Spring 2.5에서,이 주석은 @Component의 전문화 역할을하기 때문에 클래스 패스 스캐닝을 통해 구현 클래스를 자동 감지 할 수있다.

  5. ==============================

    5.나는 이미 여기에 비슷한 질문에 대답했다.

    나는 이미 여기에 비슷한 질문에 대답했다.

    둘 다 다릅니다.

    @Service 주석은 다른 용도로 사용하고 @Controller는 기타 용도로 사용합니다. 사실 Spring @Component, @Service, @Repository 및 @Controller 주석은 Spring 프레임 워크에서 클래스 경로 검색을 사용하여 자동으로 bean을 검색하는 데 사용되지만, 그렇지 않습니다. 모든 기능이 동일 함을 의미합니다. @Service : 주석 된 클래스가 비즈니스 계층의 서비스 구성 요소임을 나타냅니다.

    @Controller : Annotated 클래스는 컨트롤러 구성 요소임을 나타내며 주로 프레젠테이션 계층에서 사용됩니다.

  6. ==============================

    6.당신은 그들이 다르지 않습니다. 응용 프로그램을 배포 할 때 컨트롤러 매핑이 예를 들어 borked됩니다.

    당신은 그들이 다르지 않습니다. 응용 프로그램을 배포 할 때 컨트롤러 매핑이 예를 들어 borked됩니다.

    왜 당신은 어쨌든, 컨트롤러는 서비스가 아니며, 그 반대의 경우도 마찬가지입니다.

  7. from https://stackoverflow.com/questions/15922991/is-spring-annotation-controller-same-as-service by cc-by-sa and MIT license