Spring 소스 코드 (8) - spring - IOC 의 주석

머리말
그 동안 bug 가 좀 많 았 습 니 다. 낮 시간 은 bug 를 고 치 는 데 거의 사용 되 었 습 니 다. 최근 한 달 동안 책 을 거의 읽 지 않 았 습 니 다. 빨리 bug 를 고 쳐 서 책 을 읽 어야 합 니 다.spring 소스 코드 분석 이 끝 난 후에 우 리 는 순환 의존 해결 방안 과 디자인 모델 을 완 성 했 습 니 다. 그러면 다음 에 Spring 에서 자주 사용 하 는 주 해 를 분석 하 겠 습 니 다.여기 서 먼저 주해 유형 을 설명 하 겠 습 니 다.
  • Annotition 의 유형 은 interface 가 아 닌 키워드 @ interface 를 사용 합 니 다.이것 은 java. lang. annotition. annotition 인 터 페 이 스 를 계 승 했 습 니 다. 인 터 페 이 스 를 설명 한 것 이 아 닙 니 다.
  • Annotation 유형, 방법 정 의 는 독특 하고 제한 을 받는다.
  • Annotation 유형의 방법 은 매개 변수 가 없고 이상 이 없 는 것 으로 밝 혀 야 합 니 다.이 방법 들 은 Annotation 의 구성원 을 정의 합 니 다. 방법 은 구성원 이름 이 고 방법 은 구성원 의 유형 으로 되 돌아 갑 니 다.
  •    ,       value(),                       , :@Target({ElemenetType.TYPE})       @Target(value={ElemenetType.TYPE})
            primitive  、Class  、    、Annotation                    。
    

    방법 뒤에 default 키 워드 를 사용 하여 기본 값 을 추가 하여 구성원 의 기본 값 을 설명 할 수 있 습 니 다. null 은 구성원 의 기본 값 으로 할 수 없습니다. 이것 은 우리 가 비 Annotation 형식 에서 정의 하 는 방법 과 크게 다 릅 니 다.Annotation 형식 과 그의 방법 은 Annotation 형식의 인 자 를 사용 할 수 없고 구성원 은 generic 일 수 없습니다.반환 값 형식 만 Class 인 방법 은 Annotation 형식 에서 generic 을 사용 할 수 있 습 니 다. 이 방법 은 클래스 로 다양한 유형 을 Class 로 변환 할 수 있 기 때 문 입 니 다.Annotation 유형 은 인터페이스 와 비슷 한 점 이 있 습 니 다. 상수, 정적 구성원 유형 (예 를 들 어 매 거 진 형식 정의) 을 정의 할 수 있 습 니 다.Annotation 유형 도 인터페이스 처럼 실현 되 거나 계승 할 수 있 습 니 다.
    1. 원 주해
    원 주해 의 역할 은 바로 다른 주 해 를 주석 하 는 것 이다.자바 5.0 은 4 개의 표준 meta - annotation 형식 을 정의 합 니 다. 다른 annotation 형식 에 대한 설명 을 제공 하 는 데 사 용 됩 니 다.
  • 1.@Target,
  • 2.@Retention,
  • 3.@Documented,
  • 4. @ Inherited 는 Spirngboot 의 주해 @SpringBootApplication 를 통 해 알 수 있 습 니 다.
  • @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan(excludeFilters = {
            @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
            @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
    public @interface SpringBootApplication {
    

    1.1、@Target
    주석 사용 범 위 를 설정 하 는 데 사 용 됩 니 다 [상세 참고] @ Target 주석 Target 은 Element Type 을 통 해 사용 가능 한 범위 의 매 거 진 집합 을 지정 합 니 다.
  • Element Type. TYPE: 인터페이스, 클래스, 매 거 진, 주해
  • Element Type. FIELD: 필드, 매 거 진 상수
  • ElementType. METHOD: 방법
  • ElementType. PARAMETER: 방법 매개 변수
  • ElementType. CONSTRUCTOR: 구조 함수
  • ElementType.LOCAL_VARIABLE: 부분 변수
  • ElementType.ANNOTATION_TYPE: 주석
  • ElementType. PACKAGE: 가방
  • 1.2、@Retention
    주 해 를 정의 하 는 보존 정책 입 니 다.[상세 참고] @ Retention 은 Retention Policy 를 통 해 주해 의 매 거 진 집합 을 지정 합 니 다.
  • Retention Policy. SOURCE: 주 해 는 원본 코드 에 만 존재 하 며, class 바이트 파일 에는 포함 되 지 않 습 니 다
  • Retention Policy. CLASS: 기본 보존 정책 입 니 다. 주 해 는 class 바이트 파일 에 존재 하지만 실행 시 얻 을 수 없습니다
  • Retention Policy. RUNTIME: 주 해 는 class 바이트 파일 에 존재 하 며, 실행 중 반사 로 얻 을 수 있 습 니 다
  • 1.3、@Documented
    다른 유형의 annotation 을 설명 하 는 데 사용 되 는 프로그램 구성원 의 공공 API 로 표시 되 어야 하기 때문에 자바 doc 와 같은 도구 로 문서 화 될 수 있 습 니 다.Documented 는 구성원 이 없 는 태그 주석 입 니 다.
    1.4、@Inherited
    하위 클래스 가 부모 클래스 의 이 주 해 를 계승 할 수 있다 는 것 을 설명 합 니 다.
  • @ Inherited 에 의 해 주 해 된 주 해 는 class 에서 만 사용 할 수 있 는 '자동 계승 특성'
  • '자동 계승 특성' 이란 하위 클래스 에서 주 해 를 검색 하면 부모 클래스 에서 @ Inherited 에 의 해 주 해 된 주 해 를 고려 하 는 것 을 말한다 [참고] @ Inherited
  • 2. Spring - IOC 의 주해
    2.1, Autowired 주해
    by Type 주입 에 따 르 면 이것 은 가장 핵심 적 인 주해 로 좌우 에 설명 하지 않 고 소스 코드 를 직접 봅 니 다.
    @Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Autowired {
        boolean required() default true;
    }
    

    여기 서 우 리 는 원 주 해 를 보 았 는데 모든 주 해 는 이 네 가지 원 주 해 를 바탕 으로 한 다 는 것 을 설명 한다.
  • @ Autowired 는 bean 형식 에 따라 spring 컨 텍스트 에서 찾 습 니 다. 등록 유형 은 유일 해 야 합 니 다. 그렇지 않 으 면 이상 을 보고 해 야 합 니 다.@ Resource 와 차이 점 은 @ Resource 는 bean 이름 이나 bean 형식 두 가지 방식 으로 @ Autowired (required = false) 를 찾 을 수 있 습 니 다. spring 컨 텍스트 에서 이 유형의 bean 을 찾 지 못 했 을 때 new () 방식 을 사용 할 수 있 습 니 다.
  • @ Autowired 레이 블 이 Map 형식 에 작용 할 때 Map 의 key 가 String 형식 이면 Spring 은 용기 에 있 는 모든 종류의 Map 의 value 에 해당 하 는 유형의 Bean 을 추가 하고 Bean 의 id 나 name 을 Map 의 key 로 사용 합 니 다.
  • @ Autowired 는 BeanFactory 유형, ApplicationContext 유형, Resource Loader 유형, ApplicationEventPublisher 유형, MessageSource 유형 에 표시 하면 Spring 은 이러한 실현 유형의 인 스 턴 스 를 자동 으로 주입 하고 추가 작업 이 필요 하지 않 습 니 다.

  • 2.2 @Qualifier
    보통 @ Autowired 와 함께 사용 합 니 다.
    @Autowired
    @Qualifier("softService")
    private ISoftPMService softPMService;
    
  • @ Autowired 를 사용 할 때 같은 유형의 bean 을 여러 개 찾 으 면 이상 을 던 집 니 다. 이 때 @ Qualifier ("beanName") 를 사용 하여 bean 의 이름 을 명 확 히 지정 하여 주입 할 수 있 습 니 다. 이 때 는 @ Resource 지정 name 속성 과 동일 합 니 다.

  • 2.3 @Resource
    @ Resource 기본 값 은 ByName 에 따라 @ Resource 를 자동 으로 주입 합 니 다. 두 가지 중요 한 속성 이 있 습 니 다: name 과 type, Spring 은 @ Resource 주해 의 name 속성 을 bean 의 이름 으로 해석 하고 type 속성 은 bean 의 유형 으로 해석 합 니 다.
    2.4、RequestMapping
    이것 은 springMVC 에서 가장 자주 사용 하 는 주해 입 니 다. Spring 4.0 이후 버 전에 서 @ GetMapping, @ PostMapping, @ PutMapping, @ DeleteMapping 등 을 출시 했 습 니 다. 이것 은 restful 스타일 에 제공 하 는 패 키 징 주해 입 니 다. 사실은 @ RequestMapping 과 RequestMethod 가 합 쳐 진 주해 입 니 다.
  • 역할: @ GetMapping = @ RequestMapping (method = RequestMethod. GET)
  • 설명: 클래스 나 방법 에 작용 할 수 있 으 며, 요청 주 소 는 클래스 의 주소 + 방법 상의 주소
  • 매개 변수 바 인 딩 설명: 예 를 들 어:http://localhost/user/list?userId=10&userName=tom
  • @GetMapping("/user/list")
    public User getUser(User user){
        
        ···········
        
    }
    

    이렇게 하면 userId 와 username 은 user 가 대응 하 는 속성 에 반 영 됩 니 다.
    2.5、@RequestParam,@PathVariable
    바 인 딩 매개 변수 에 사용 되 며, @ PathVariable 은 밴드 주소 의 rest 스타일 의 매개 변수 에 사용 되 며, @ RequestParam 은 보통 제출 한 매개 변 수 를 바 인 딩 하 는 데 사 용 됩 니 다.
    @PostMapping("/status/update/{id}")
    public RestResult updateStatus(@PathVariable Long id, @RequestParam("status") Boolean status) {
        
        ··········
        
    }
    
    

    @ RequestParam (value = "id", required = false), required = faluse 이 매개 변 수 는 필수 가 아 닙 니 다. 기본 값 은 true 입 니 다.
    2.6、@Scope
    이 방법 은 bean 의 생 성 유형 을 지정 합 니 다. 기본 값 은 단일 예 입 니 다. 또한 scope 는 prototype, request, session, global session 역할 도 메 인 이 있 습 니 다.scope = "prototype" 여러 예
  • 1. singleton: 전체 적 으로 하나의 인 스 턴 스
  • 만 있 습 니 다.
  • 2. prototype: Bean 을 가 져 올 때마다 새로운 인 스 턴 스 가 있 습 니 다
  • 3. request: request 는 모든 HTTP 요청 에 대해 새로운 bean 이 생 긴 다 는 것 을 나타 내 는 동시에 이 bean 은 현재 HTTP request 에서 만 유효 합 니 다
  • 4. session: session 역할 도 메 인 은 매번 HTTP 요청 에 대해 새로운 bean 이 생 긴 다 는 것 을 나타 내 는 동시에 이 bean 은 현재 HTTP session 에서 만 유효 합 니 다
  • 5. global session 역할 영역 은 표준 HTTP Session 역할 영역 과 유사 하지만 portlet 기반 웹 응용 에서 만 의미 가 있 습 니 다
  • 2.7、@Service,@Repository,@Component
    비 즈 니스 계층 구성 요 소 를 표시 할 때 이 설명 은 기본적으로 @ Component [@ Service] 를 사 용 했 습 니 다.
    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Component
    public @interface Service {
      String value() default "";
    }
    
    

    【@Repository】
    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Component
    public @interface Repository {
        String value() default "";
    }
    
    

    【@Component】
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Component {
        String value() default "";
    }
    
    

    이 를 통 해 알 수 있 듯 이 이 세 가지 주 해 는 기능 이 큰 차이 가 없고 주로 업 무 를 표시 하고 업무 와 관련 된 구분 을 하 는 데 사용 된다.
  • @ Service 는 업무 층 구성 요 소 를 표시 하 는 데 사 용 됩 니 다
  • @ Repository 는 데이터 액세스 구성 요소, 즉 DAO 구성 요소
  • 를 표시 하 는 데 사 용 됩 니 다.
  • @ Component 는 구성 요 소 를 가리 키 며 구성 요소 가 분류 하기 어 려 울 때 이 주 해 를 사용 하여 표시 할 수 있 습 니 다.

  • 2.8、@Controller、@RestController
    제어 층 구성 요소 인 SpringMVC 에 표 시 된 Controller 는 4.0 이후 @ RestController 를 출시 했 습 니 다. 사실은 @ Controller 와 @ Response Body 의 집합 입 니 다.
    2.9、@ResponseBody
    이 주 해 는 Controller 의 방법 을 되 돌려 주 는 대상 으로, 적절 한 HttpMessageConverter 를 통 해 지 정 된 형식 으로 변환 한 후 Response 대상 의 body 데이터 영역 에 기록 합 니 다.역할 영역 류 또는 방법 상 [상세 참고] (http://www.cnblogs.com/fangjian0423/p/springMVC-request-param-analysis.html) 이 상세 한 것 은 springMVC 소스 코드 분석 때 다시 말 합 니 다.
    3.0、@RequestBody
  • 이 설명 은 Request 가 요청 한 body 부분 데 이 터 를 읽 는 데 사 용 됩 니 다. 시스템 기본 설정 의 HttpMessageConverter 를 사용 하여 분석 한 다음 에 해당 하 는 데 이 터 를 되 돌 릴 대상 에 연결 합 니 다.
  • HttpMessage Converter 가 되 돌아 오 는 대상 데 이 터 를 controller 의 방법 적 인 매개 변수 에 연결 합 니 다.

  • 마지막 에 쓰다
    이 편 은 주로 Sping 의 주 해 를 썼 고, 다음 편 은 SpingBoot 가 내 놓 은 주 해 를 설명 한다.

    좋은 웹페이지 즐겨찾기