'수' 와 '' 봄 ',' @Repository @Component @Service 주석입니다 특정 기능을 함께 사용할 수 있는 목동들과 아니면 유용하던가요 제공하십시오 역할을 하는 표기법은 디바이스입니다?
다시 말하면, I have a 클래스 ',' 에서 '서비스' 를 쉐퍼드도 주석 변경하십시오 @Service @Component 여전히 같은 방식으로 동작할 있습니까?
또한 클래스의 주석 또는 높여줍니까 영향력을 비헤이비어와 기능을?
[봄 문서용으로] 에서 (https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html # 스테레오타이프 주석입니다 콩):
>. 이후, '봄' 의 annotation 은 표시자가 @Repository 2.0 과 >. 충족합니다 모든 클래스가 있는 역할 또는 연판 (소트트웨어용 데이터 >. 액세스만 객체인지 또는 DAO) 의 리포지토리를. 이 가운데 /dev/raw/raw1 표시자가 >. 는 자동 번역 존재한다. >. >. 봄 2.5 cxp 주석입니다 기업에서든 돌렸다. @component ',' >. '@Service' 및 '@Controller'. @component '은' 모든 일반 돌렸다 >. 봄 관리됨 구성 요소. '@Repository @Service @Controller' 이 ',' '및' >. ',' 의 특수화 @Component 대한 보다 자세한 사용 사례 >. 같이 지속, 서비스 및 프레젠테이션입니다 레이어에는, >. 기록했다. >. >. 따라서 구성 요소를 클래스 ',' @Component 함께 주석을 달 수 있습니다 >. 하지만 그들과 함께 '에서', '또는' @Controller @Service @Repository 달기 ',' >. 대신 더 적합한 너회의 클래스는 제대로 처리하는 툴과도 >. 또는 연관 애스펙트에서. 예를 들어, 이러한 연판 주석입니다 >. 이상적인 목표를 푸아나스루츠. >. >. 따라서 '선택' 을 사용하는 경우 '또는' @Service @Component 사이에 >. ',' 는 고객의 서비스 레이어에는 @Service 확실히요 더 나은 선택. 마찬가지로, >. 앞에서 설명한 것처럼, 이미 '대한' 로 지원되는 @Repository 표시자가 >. 자동 번역 idfsysobject. 환경의 지속성 레이어에는.
┌────────────┬─────────────────────────────────────────────────────┐
│ Annotation │ Meaning │
├────────────┼─────────────────────────────────────────────────────┤
│ @Component │ generic stereotype for any Spring-managed component │
│ @Repository│ stereotype for persistence layer │
│ @Service │ stereotype for service layer │
│ @Controller│ stereotype for presentation layer (spring-mvc) │
└────────────┴─────────────────────────────────────────────────────┘
어떤 답을 이미 많이 사용되는 we& # 39, ll, 이러한 상태를 주석은 중점을 두고 여기에 약간의 차이를 살해하였나이다.
>. 먼저 유사 >. >. 규모의 강조표시하기 다시 1 점, 그리고 이 모든 것이 관련하여 자동 감지 스캑 콩데피니션 주석입니다 대한 의존성 주입 (viz @component @service.,, >. @Repository, @Controller) 같습니다. 배치하십시오 한 수 있습니다. >. 우리의 길을 계속 다른 around. 수 있습니다.
>. @Component
이 클래스는 봄 컴포넌트인지 주석 찼음을 나타내는 은 범용 돌렸다.
'그냥', '@Service @Controller 살펴' 와 '@Repository' 주석 정의:
@Component
public @interface Service {
….
}
& # 160;
@Component
public @interface Repository {
….
}
& # 160;
@Component
public @interface Controller {
…
}
따라서 잘못된 것이라고 말할 수 있는 것이 아니다 '', '@Service @Controller @Repository' 이 '와' 특수한 유형의 '@Component' 주석. ',' 선택 및 레지스터, 콩, 그들의 다음 클래스는 < context:component-scan> 구축한 것처럼 '을 (를)' 로 주석이 @component.
또한 특수 문자 주석은 주석을 달 '을 (를)' 즉, @component 스캐닝된 있기 때문에 스스로 주석 등도 @component '의. 만일 우리가 우리 자신의 정의하십시오 주석을 달 수 있는 '맞춤형 주석 및 정보기술 (it) 을 (를)', ',', 또 @Component < context:component-scan> 스캔되었습니다.
>. @Repository
이것은 데이터 리포지토리를 eventtest 라는 클래스를 나타냅니다.
이 외에도 '의 구성 , 는 지적하고, 주석 작업이 @Repository 기반 플랫폼 중 하나를 선택하지 않은 이들을 잡기 위해 특정 예외 및 re-throw 봄 의 통합 예외가 아니다. 이를 위해 우리는 우리가 우리 봄 ',' 퍼시스텐스엑스티온트란슬라티온포스트프로스서 제공하는 데 필요한 추가 프로그램 컨텍스트로 다음과 같습니다.
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
이 보좌관은 주석을 달 수 있는 모든 콩 볶아 포스트 프로세서입니다 자도으로 이동성이란 @Repository '모든' 의 하나로 취소된 후 다시 던져 도왔으매 플랫폼별 예외는 포착됨 봄 데이터 액세스 존재한다.
>. @Controller
특정 클래스 '는' @Controller 주석 알리는 역할을 하는 컨트롤러입니다. 주석, 주석 달린 클래스 '는' 역할을 하는 경우 해당 역할에 대해 손실됨을 @Controller 돌렸다.
이 같은 스위치별로 수 없다 '' 또는 '' 않더라도 주석 지원하는 다른 @Service @Repository 여바바 마찬가지다. 주석 '과' 을 (를) '는 클래스뿐만 dispatcher @controller 탐지합니다 메서드을 @requestmapping 그 안에 있는' 주석입니다 주석이. 우리는 '그' 를 사용할 수 있는 방법 '을 (를)' 에 주석을 단 / @requestmapping 구멍만이 클래스는 @controller 않을 것 ',' '', '@service 작동합니까 @component @repository' 상술합니다.
< sub> Note:;; 만약 다른 방법을 통해 모든 클래스는 이미 등록하셨습니까 비호환성의 콩 같은 ',' 또는 '@Component @Bean 통해 통해', '@Service' 상술합니다. 후 주석, 주석 '을 (를)' 도 '클래스' @requestmapping 경우 주석 @requestmapping 선택할 수 있습니다. 하지만 다른 scenario.< that& # 39 의 /sub>;
>. @Service
'콩' 비즈니스 로직과 메서드를 호출하는 저장소에서의 레이어에는 @Service 갖는다.
>. 또 뭐가 있지?
향후 유사한 특수 기능을 추가할 수 있는 '봄', '위' 와 '' @Service @Controller @Repository 따라 레이어 댁꽕. 따라서 항상 좋은 방법이 존중하십시오 it& # 39 에 발맞춰 레이어에는 컨벤션 및 사용한다.
이들은 거의 같은 - 모두야 짓궂군요 작업자쪽에서 클래스는 봄 콩. '', '특수' 의 '이' 와 '@Controller @Service @Repository @Component. 그들과 함께 특정 작업을 수행할 수 있습니다. 예를 들면 다음과 같습니다.
콩이 @Controller spring mvc 사용되는 '-'
다른 것은 의미적으로 지정하는지 다른 구성 요소를 의미한다.
한 심아이엔큐 @Component '는' (it), 그리고 기타 주석을 달기 포락선으로 사용할 수 있다는 것과 동일한 방식으로 '@service'.
예를 들어 최근 I made:
@Component
@Scope("prototype")
public @interface ScheduledJob {..}
그래서 모든 클래스가 있는 '봄' 이 주석을 단 @ScheduledJob 콩과 이와 함께 쿼츠 작업를 것으로 등록되어 있다. 방금 제공해 줘야 처리하는 코드는 특정 주석.
@Component 같습니다
<bean>
동일한 기능 및 서비스, 컨트롤러거 리포지토리를 짓궂군요 있는 있다.
주석은 3 개, 응용 프로그램에서 Layers" " 구분하는 데 쓰인다.
왜 이제 하나님께용서를 구분할 수 있습니다. (난 solaris. 알고 aop 화면 지향 프로그래밍)
Dao ";;; before" " around" 기록 할 수 있도록 또는 " after"; 이 DAO 방법. 왜냐하면 당신은 당신이 할수 있는 한 DAO 에서 1 위를 차지했다. 또는 tasks. 너희는너희가 그냥 달성됩니다 는 분판 우려
후 주석 @Controller 상상할 수 있을 것이라고 이 구성 요소는 한 개만 있으면 디스패치하기, 비즈니스 로직과 액세스을 데이터베이스에 모두 혼합됨, 더러워 코드!
'봄', '', '@Controller @Component @Service 주석입니다 사용되는' 이 '및' @Repository 돌렸다.
'@Service': 즉, 데이터 및 관련 계산이므로 다란다 이 모든 비즈니스 로직 이 때문에 우리 지속성 있는 비즈니스 레이어에는 주석 아니라 사용자 이 방법을 사용하여 직접 메서드로부터 dial call 이 주석. * It @Repository 사용자의 요청에 따라 요구할 것이라고 밝혔다.
'@Repository': 이는 지속성 있는 데이터베이스에서 데이터를 얻기 위해 사용되는 응용 계층 (Data Access 레이어에는). 즉, 모든 데이터베이스 관련 작업은 repository. 의해
'-' @Component 주석달기 다른 구성 요소 (예를 들어 미삭 리소스에는 클래스뿐만) 와 컴포넌트인지 돌렸다.
>. 구성 요소 " 있음을 주석이 달린 클래스는 ";). 이러한 클래스는 >. 후보로 꼽히는 사용할 때 자동 감지 >. 주석 기반 구성 및 classpath 스캐닝중. >. >. 다른 클래스 수준 주석입니다 로 확인 할 수 있습니다 >. 구성 요소 뿐만 아니라, 일반적으로 특별한 종류의 구성 요소: 예: >. # 39 의 주석, 주석 또는 AspectJ& @repository @Aspect.
>. 봄 2.5 cxp 주석입니다 기업에서든 돌렸다. @Component, @Service 및 @Controller. 모든 봄 관리됨 컴포넌트인지 @component 역할을 하는 일반 돌렸다. 반면, @Service @Repository @Controller @Component 의 특수화 역할을 할 수 있으며, 보다 자세한 사용 사례 (예를 들어, in the persistence, 서비스 및 프레젠테이션입니다 레이어에는 각각). 즉, 주석 달기, 그들과 함께 할 수 있는 컴포넌트 클래스 @Component 찍었으나, 주석달기, 또는 @Controller @Repository @Service 너회의 클래스는 제대로 처리하는 것이 더 적합한 도구 또는 연관 애스펙트에서. 예를 들어, 이러한 이상적인 목표를 푸아나스루츠 주석입니다 돌렸다. 물론, 운반할 수 있는 것은 향후 추가 시맨틱스를 @Service @Repository 수도 있고, @Controller 릴리스에서는 스프링 프레임워크. 따라서 사용 할 경우, 또는 서비스 계층 간 결정이요 @Component @Service 단축시킵니다 @Service 명백히 더 나은 선택. 마찬가지로, 앞에서 설명한 것처럼, 이미 표시자가 로 지원되는 자동 번역 환경의 지속성 레이어에는 @Repository idfsysobject.
>. 자동 스캑 컴포넌트인지 @component 나타냅니다. Dao 구성 요소를 지속 레이어에는 @repository 나타냅니다. 서비스 구성 요소를 즈니스 레이어에는 @service 나타냅니다. 표현 계층 (presentation layer) 의 구성 요소를 @controller - 컨트롤러거 나타냅니다.
참조: - 봄, 관리됨 구성 요소를 사용하는 문서 - Classpath 스캐만을 먹어서나 구성으로의 jave
'와' 에서 '사용' @Service @Repository 주석입니다 데이터베이스 연결 관점에서 중요하다.
사용하지 않는 경우, 적절한 주석입니다 커밋합니다 의해 발생할 수 있습니다 예외 무시됨 롤백에서 트랜잭션입니다. 스트레스 테스트 동안 로드하십시오 롤백합니다 JDBC 트랜잭션을 관련된 예외 볼 수 있습니다.
기술적으로 '', '모든' 이 ',' @Repository @Controller @Service 마찬가지다. 모두야 @Component 연장시킵니다 ''.
내년 봄부터 소스 코드:
주석이 달린 클래스는 component" 나타내는 ";). 이러한 클래스들의 간주되고 사용할 때 자동 감지 후보 주석 기반 구성 및 classpath 스캐닝중.
우리는 '콩' 에 대해 더 잘 이해할 수 있으나, 각각의 모든 @Component 직접 사용하는 대형 및 유지 관리 응용 프로그램 ',', '', '우리가 사용하는 @Controller @Service @Repository'.
목적은 각 주석:
만약 우리가 그들의 배치하십시오 교환 (사용 '대신' @Controller @Repository '') 의 응용 프로그램이 제대로 작동합니다.
주 목적은 '는 세 가지' 를 사용하여 @annotations 높이기 위해 모듈식 기업용 애플리케이션.
1. **@Repository** - Automatic exception translation in your persistence layer.
2. **@Service** - It indicates that the annotated class is providing a business service to other layers within the application.
이러한 모든 주석은 이 세 가지 유형의 차이점은 주석은 주석을 스테레오 종류
>. - 만약 우리가 그 역할을 통해 추가 @Component 클래스는 클래스 무슨뜻이냐믄 컴포지션이 논리라구요 구성된 하지만 컴포넌트 클래스 >. 특히 비즈니스 클래스 또는 redboot*용 서버인지에 알려주지 않습니다 >. 그래서 우리는 이 논리를 영구 또는 컨트롤러거 don& # 39 직접 사용할 수 없다. >. @Component 주석 >. - 만약 우리가 그런 역할을 하는 비즈니스 로직을 클래스) 로 하여금 추가 @service 주석 >. - 만약 우리가 그 위에 있는 논리를 통해 지속 가능한 추가 @Repository 클래스 (class >. 여기에 대한 주석, 주석 및 @Controller @Repository @Service 기본 @Component -
예를 들어
package com.spring.anno;
@Service
public class TestBean
{
public void m1()
{
//business code
}
}
package com.spring.anno;
@Repository
public class TestBean
{
public void update()
{
//persistence code
}
}
'-' 또는 '때 하나님은 추가하므로 @Service @Repositroy @Controller 주석 기본적으로' 존재 '또는' 위에 '클래스' 주석 @Component 예정이다
봄 '은 네 개의 서로 다른 유형의 자동 컴포넌트인지 스캑 주석, 이들은', '@Service @Component', '@Repository' 와 '@Controller'. 하지만 모든 구성 요소를 기술적으로 차이가 없으며, 그들 사이에 정의된 특수 목적 및 안에 레이어에는 스캑 자동 주석 사용해야 합니다.
'@Component': 이는 기본 자동 주석, 주석 클래스는 컴포넌트인지 자동 스캑 스캑 컴포넌트인지 나타냅니다.
'@Controller': 주로 쓰이는 선수단 구성 요소로, 주석이 달려 있다는 것을 나타냅니다 컨트롤러거 클래스 표현 계층.
'@Service': 비즈니스 클래스는 서비스 구성 요소를 레이어에는 주석이 나타냅니다.
'@Repository': 이 같은 행동을 지속, 데이터베이스 리포지토리를 레이어에는 내에서 이 주석 사용해야 합니다.
한 동안 그 보다 특화된 형태의 '클래스' @Component 선택해야 하는 이 같은 특정 비헤이비어를 있을 수 있으며, 주석 달기 진행하십시오.
자바 표준인 따르면 이 질문에 대한 대답을 제시할 수 있습니다.
지금 가지고 있는 '봄' 에서 지원되는 jsr 330 정의하십시오 @named '콩' 만을 사용할 수 있습니다 (@named @component 짐작이지만요. '='). 그래서 이 표준에 따르면, 그 편견을 사용하여 정의할 수 없는 것 같다 (',' ',' like '@Repository @Service @Controller') 를 범주입니다 콩.
그러나 이들은 서로 다른 스프링 사용자 주석에 대한 구체적인 활용, 예를 들면 다음과 같습니다.
예를 들어 있는 다른 컴포넌트와의 주석을 달고 @Component 미삭 리소스에는 클래스뿐만.
@Component
public class AdressComp{
.......
...//some code here
}
는 모든 봄 관리됨 컴포넌트인지 @component 일반 돌렸다.
@Controller 대한 구체적인 활용, @Service 및 @Repository 의 특수화 @Component 있다.
봄, 4, 최신 버전:
>. 이 모든 클래스가 이 @Repository annotation 은 표시자가 충족합니다. >. 저장소 역할 또는 연판 (소트트웨어용 데이터 액세스 오브젝트 >. 또는 DAO). 이 가운데 /dev/raw/raw1 표시자가 는 자동 번역 >. 예외 20.2.2 섹션에서 설명한 바와 같이, "idfsysobject. 번역". >. >. 봄 자세한 주석을 돌렸다. @Component @Service, >. 및 @Controller. 모든 @component 는 일반 돌렸다 >. 봄 관리됨 구성 요소. @Repository @Service 및 @Controller 있다, >. 의 특수화 @Component 대한 보다 자세한 활용 사례, >. 같이 지속, 서비스 및 프레젠테이션입니다 레이어에는, >. 기록했다. 따라서 구성 요소를 통해 클래스가 주석을 달 수 있습니다 >. 하지만, 주석 달기, 그들과 함께 @Repository @Service @component 의해, 또는 >. 대신 더 적합한 @controller 너회의 클래스는 제대로 >. 처리하는 도구 또는 연관 애스펙트에서. 예를 들어, 이러한 >. 이상적인 목표를 푸아나스루츠 주석입니다 돌렸다. 또한 >. @repository @Service @Controller 다닐 수 있게 하고, >. 향후 추가 시맨틱스를 릴리스에서는 스프링 프레임워크. 따라서 >. 중에서 선택할 경우 또는 @Service 단축시킵니다 @Component 사용하여 >. 서비스 계층, @Service 명백히 더 나은 선택. 마찬가지로, tpc. >. 위에 설명된 @Repository 이미 표시자가 대한 지원 방식 >. 자동 번역 idfsysobject. 환경의 지속성 레이어에는.
주석 달린 수 있도록 하는 '는' @Component 최상위 일반 주석 및 사용할 수 있는 디 컨테이너입니다 스캔될 콩
'주석 및 it 전문업체로 @Repository' 에서 DAO 클래스뿐만 변환하는 기능을 제공하는 모든 선택 해제됨 예외
'전문' 는 @Service 주석. 이 모든 새로운 기능을 가지고 있지만 이는 현재 의도가 없는 빈
Mvc 는 주석 @controller 전문업체로 인식하고 있는 콩 같은 @RequestMapping 주석 '과' 등 더 이상 사용할 수 있는 모든
정보 더 볼 수 있습니다.
, @Repository @Controller @Service @Component 차이가 없다. @Component 는 일반 주석 표현하기 위해 envision lionbridge 적용한다. 하지만 몇몇 구성 요소 (mvc) 의 일부로 응용 프로그램 구성 요소 서비스 레이어에는 없을 것 같은 장소에 레이어에는 구성 요소 및 프레젠테이션입니다 레이어에는 구성 요소. 그래서 사람들이 그 때 또 다른 3 개의 주석입니다 차별화합니다 봄.
지속성을 나타내기 위해 레이어에는 구성 요소: @Repository
레이어에는 나타내기 위해 서비스 구성 요소: @Service
표현 계층 표현하기 위해 구성 요소: @Controller
그렇지 않으면 @Component 모두야 위해 사용할 수 있습니다.
A ',' 봄 문서용으로 @Service 쿼트에
>. 주석이 달린 클래스는 " Service"., 원래 정의된 나타냅니다. >. 의해 도메인 제어됨을 design (에반스 (2003년) 을 " 표시됨과 작업을 했다. >. 인터페이스입니다 에우프로니아과로 있는 모델 없이 state." 캡슐화됩니다, >. 서비스, 비즈니스 클래스는 " Facade" 것으로 수도 있습니다. (flash. >. 핵심 J2EE 패턴을 감지에서) 또는 비슷한. 이 annotation 은 >. 범용 연판 및 개별 팀의 좁혀지지 수 있습니다. >. 시맨틱스를 및 사용 적절하게.
쳐다보거라 경우 도메인 제어됨을 의해 설계, 에릭 에번스
>. 작업을 하는 인터페이스입니다 에우프로니아과로 서비스가 제공됩니다 >. 모델에 따라 객체에는 엔티티에는 및 가치 없이 캡슐화 스테이드 >. 그러나 그들은 기술 프레임워크와도 서비스는 일반 패턴과 못하며창조된. >. 도메인의 레이어에는 적용할 수도 있습니다. 이름 서비스 강조하는 >. 릴레이션십 다른 객체와. 엔티티에는 오브젝트에도 달리 it 및 가치 >. 해야 할 수 있는 측면에서 클라이언트여야 순수하게 정의됩니다. 서비스 >. 라는 동사 않고 대신 한 엔티티에는 활동에 대해 경향이 있다 >. 명사 보다. 아직 서비스 추상, 의도적인 수 있습니다. >. 정의. 그냥 다른 정의를 보다 flavor 가 있다. >. 객체에는. 아직 책임, 그리고 그 정의된 서비스 합니다. >. 이에 대하여 책임을 맡은 바 소임을 다하는 인터페이스입니다 한다 >. 일부 도메인 모델이다. 작업을 하는 이름이 나와 있습니다. >. 유비쿼터스 언어 또는 출시예정인 다르거든요. 매개변수입니다 및 결과 >. 도메인 객체에는 합니다. 서비스 아니라 현명하게 사용해야 합니다 >. 스트립 수 있는 엔티티와 모든 가치를 객체에는 비헤이비어를. >. 하지만, 한 때 중요한 작업은 사실 도메인 개념 >. 서비스 모델 기반 설계 자연 일부를 형성합니다. 선언된 wt. >. # 39 doesn& 위조품 아닌, 객체 모델 as a SERVICE), t >. 사실 아무것도 아닌 단독 작업은 방황케 나타내는 >. 아무나.
'와' 리포지토리를 따라, 에릭 에번스
>. 특정 유형의 모든 오브젝트도 seabreeze 리포지토리를 비호환성의 개념 >. 세트 (일반적으로 에뮬레이트됨). 그러나 이 같은 역할을 더욱 취합은 >. 정교한 쿼리하지 기능마저도. 해당 유형의 객체에는 있다. >. 뒤에 리포지토리를 삽입물의 추가하고 제거할 수 있으며, 기계 >. 그들을 또는 삭제되지만 데이터베이스입니까. 이 정의는 한 취합합니다. >. 뿌리가 액세스하십시오 책임사용자 세트를 제공하는 통합 >. 라이프 사이클 초부터 취합합니다 끝까지.
@Component : 최대 절전 모드, 이를 통해 해당 컴포지션이 너회가 주석을 달 클래스용 @Component 콩.
@Repository : 이를 통해 최대 절전 모드 컴포지션이 다오 클래스 (class @Repository 너회가 주석 및 취급하는 정보기술 (it) 을 다오 클래스. 선택하지 않을 수 있습니다 (DAO 에서 던진 메서드을) 로 번역 서비스를 받을 수 있다는 예외 다트라클레스엑스티온 봄.
@Service : 이 서비스를 통해 할 수 있는 최대 절전 모드 컴포지션이 클래스용 @Transactional 주석입니다 그러하매 최대 절전 모드 서비스 등 it as a Service) 은 레이어에는 구성 요소.
@Service 구성형 @Component 앞두고 있다. 이 때문에 XML 콩 볶아 solaris. 클래스 이름이 선택하지 않은 고객 서비스 구성 방식을 통해 이를 @Component 주석을 달 수 있기 때문에 이 콩 나타내십시오 콩. 그래서 빈 객체에는 가져오는 동안 고객 서비스 고객 = (고객 서비스) 콘테스트롬제빈 (customerService" ";) ',' 봄 '의 첫 번째 문자는 소문자 는 기본적으로 구성 요소 - "에서 고객 서비스" 를 "고객 서비스". 이름이 "고객 서비스" 이 구성 및 검색할 수 있습니다. 하지만 특정 클래스에 대한 @Service 사용할 경우 주석 콩 볶아 이름으로 제공할 수 있습니다
@Service("AAA")
public class CustomerService{
콩 의해 객체 및 구할 수 있습니다.
CustomerService cust = (CustomerService)context.getBean("AAA");