Spring 소스 코드 (8) - spring - IOC 의 주석
그 동안 bug 가 좀 많 았 습 니 다. 낮 시간 은 bug 를 고 치 는 데 거의 사용 되 었 습 니 다. 최근 한 달 동안 책 을 거의 읽 지 않 았 습 니 다. 빨리 bug 를 고 쳐 서 책 을 읽 어야 합 니 다.spring 소스 코드 분석 이 끝 난 후에 우 리 는 순환 의존 해결 방안 과 디자인 모델 을 완 성 했 습 니 다. 그러면 다음 에 Spring 에서 자주 사용 하 는 주 해 를 분석 하 겠 습 니 다.여기 서 먼저 주해 유형 을 설명 하 겠 습 니 다.
, 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 형식 에 대한 설명 을 제공 하 는 데 사 용 됩 니 다.
@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 을 통 해 사용 가능 한 범위 의 매 거 진 집합 을 지정 합 니 다.
주 해 를 정의 하 는 보존 정책 입 니 다.[상세 참고] @ Retention 은 Retention Policy 를 통 해 주해 의 매 거 진 집합 을 지정 합 니 다.
다른 유형의 annotation 을 설명 하 는 데 사용 되 는 프로그램 구성원 의 공공 API 로 표시 되 어야 하기 때문에 자바 doc 와 같은 도구 로 문서 화 될 수 있 습 니 다.Documented 는 구성원 이 없 는 태그 주석 입 니 다.
1.4、@Inherited
하위 클래스 가 부모 클래스 의 이 주 해 를 계승 할 수 있다 는 것 을 설명 합 니 다.
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;
}
여기 서 우 리 는 원 주 해 를 보 았 는데 모든 주 해 는 이 네 가지 원 주 해 를 바탕 으로 한 다 는 것 을 설명 한다.
2.2 @Qualifier
보통 @ Autowired 와 함께 사용 합 니 다.
@Autowired
@Qualifier("softService")
private ISoftPMService softPMService;
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("/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" 여러 예
비 즈 니스 계층 구성 요 소 를 표시 할 때 이 설명 은 기본적으로 @ 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 "";
}
이 를 통 해 알 수 있 듯 이 이 세 가지 주 해 는 기능 이 큰 차이 가 없고 주로 업 무 를 표시 하고 업무 와 관련 된 구분 을 하 는 데 사용 된다.
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
마지막 에 쓰다
이 편 은 주로 Sping 의 주 해 를 썼 고, 다음 편 은 SpingBoot 가 내 놓 은 주 해 를 설명 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.