[Spring] Annotation 정리 (수정중)
6541 단어 SpringJava스프링 입문annotationJava
Annotation이란?
- Annotation의 사전적 의미는 주석이다.
- 자바에서
Annotation(@)
는 코드 사이에 주석처럼 달아 특별한 기능을 수행하도록 하는 기술이다.
Annotation(@)
는 코드 사이에 주석처럼 달아 특별한 기능을 수행하도록 하는 기술이다.장점
코드량 감소 | 유지보수 용이 | 생산성 증가
사용 순서
1. Annotation을 정의한다.
2. Class에 annotation을 배치한다.
3. 코드가 실행되는 중에 Reflection을 이용하여 추가 정보를 획등하고 기능을 실시한다.
Reflection이란?
- 컴파일 타임에 구체적인 클래스 타입을 알지 못해도 실행 중에 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API
Annotation
자체는 아무런 동작을 가지지 않는 단순한 표식일 뿐이지만,Reflection
을 이용하면Annotation
의 적용 여부와 element 값을 읽고 처리할 수 있다.
Annotation의 종류
@ComponentScan
@Component
, @Service
, @Repository
, @Controller
, @Configuration
이 붙은 클래스를 찾아서 Context에 Bean으로 등록한다.
- 자동으로 등록되는 Bean의 이름은 클래스의 첫문자가 소문자로 바뀌어서 적용된다.
Ex) HomeController -> homeController
@Component
- 개발자가 직접 작성한 Class를 Bean으로 등록하기 위한 annotation.
@Component
public class Student {
public Student() {
System.out.pritln("hi");
}
}
@Component(value="mystudent")
public class Student {
public Student() {
System.out.println("hi");
}
}
@Bean
과 다르게 @Component
는 name이 아닌 value를 이용해 Bean의 이름을 지정한다.
@Bean
- 개발자가 직접 제어가 불가능한 외부 라이브러리 등을 Bean으로 만들려할 때 사용되는 annotation.
@Configuration
public class SpringConfig {
@Bean(name="myMemberService")
public MemberService memberService(){
return new MemberService(memberRepository);
}
}
- 라이브러리 등을 Bean으로 등록하기 위해서는 별도로 해당 라이브러리 객체를 반환하는 Method를 만들고
@Bean
Annotation을 사용하면 된다.
- name이라는 값이 없다면, Bean id는 'memberService'로 등록된다.
@Configuration
@Bean
이 있는 Method를 찾기 위해, Spring은 @Configuration
이 붙어있는 class를 자동으로 Bean에 등록해두고, 해당 클래스를 파싱하여 Bean을 생성한다.
@Autowired
- Field, setter method, constructor에 사용하며 Type에 따라 알아서 Bean을 주입해준다.
- Spring이 자동적으로 값을 할당하여 객체에 대한 의존성을 주입시킨다.
@Autowired
를 통한 DI는 Spring이 관리하는 객체에서만 동작한다. Spring Bean으로 등록하지 않고 내가 직접 생성한 객체에서는 동작하지 않는다.
https://velog.io/@ssoyeong/Spring-Spring%EC%9D%B4%EB%9E%80#3-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85-di-dependency-injection
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
- 생성자에
@Autowired
가 있으면 Spring이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다.
- 생성자가 1개만 있으면
@Autowired
생략 가능
@Controller
Author And Source
이 문제에 관하여([Spring] Annotation 정리 (수정중)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@ssoyeong/Spring-Annotation-정리
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
@Component
, @Service
, @Repository
, @Controller
, @Configuration
이 붙은 클래스를 찾아서 Context에 Bean으로 등록한다.Ex) HomeController -> homeController
@Component
public class Student {
public Student() {
System.out.pritln("hi");
}
}
@Component(value="mystudent")
public class Student {
public Student() {
System.out.println("hi");
}
}
@Bean
과 다르게 @Component
는 name이 아닌 value를 이용해 Bean의 이름을 지정한다.@Configuration
public class SpringConfig {
@Bean(name="myMemberService")
public MemberService memberService(){
return new MemberService(memberRepository);
}
}
@Bean
Annotation을 사용하면 된다.@Bean
이 있는 Method를 찾기 위해, Spring은 @Configuration
이 붙어있는 class를 자동으로 Bean에 등록해두고, 해당 클래스를 파싱하여 Bean을 생성한다.@Autowired
를 통한 DI는 Spring이 관리하는 객체에서만 동작한다. Spring Bean으로 등록하지 않고 내가 직접 생성한 객체에서는 동작하지 않는다.https://velog.io/@ssoyeong/Spring-Spring%EC%9D%B4%EB%9E%80#3-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85-di-dependency-injection
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
@Autowired
가 있으면 Spring이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다.@Autowired
생략 가능Author And Source
이 문제에 관하여([Spring] Annotation 정리 (수정중)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ssoyeong/Spring-Annotation-정리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)