프로젝트 진행하면서 사용한 어노테이션 정리
스프링에서 DI(의존성 주입)의 방법 중 생성자 주입을 임의의 코드없이 자동으로 설정해주는 어노테이션.
초기화되지 않은 final 필드, @NonNull이 붙은 필드에 대해 생성자를 만들어준다.
생성자를 관리할 필요없도록 도와준다.
// RequiredArgsConstructor를 사용하지 않은 경우
public class PostController {
private final PostService postService;
@Autowired
public PostController(PostService postService) {
this.postService = postService;
}
// RequiredArgsConstructor를 사용한 경우
@RequiredArgsConstructor
public class PostController {
private final PostService postService;
}
파라미터가 없는, 또는 클래스의 모든 필드 값을 파라미터로 받는 생성자를 자동으로 생성한다. 해당 어노테이션 사용시 클래스에 명시적으로 선언된 생성자가 없더라도 인스턴스를 생성할 수 있다.
// NoArgsConstructor, AllArgsConstructor 사용하지 않은 경우
public class Test {
private String testName;
private int testAge;
public Test() {} // 비어있는 생성자 작성 필요
public Test(String testName, int testAge) {
this.testNAme = testName;
this.testAge = testAge;
}
// NoArgsConstructor 사용한 경우
@NoArgsConstructor
public class Test {
private String testName;
private int testAge;
// 작성하지 않아도 생성 가능
}
스프링 컨테이너에 빈 객체를 해당 어노테이션을 사용해 수동으로 등록할 수 있다.
만약 AmazonS3Client 클래스를 Bean으로 등록하여 사용하고 싶으면, AmazonConfig 클래스를 생성한 뒤 @Configuraion 어노테이션을 붙여주고, @Bean을 사용해 AmazonS3Client 메소드를 선언해주면 된다.
@Configuraion은 스프링이 실행될 때 자동으로 해당 어노테이션이 붙은 클래스를 찾아서 구성 정보로 사용한다. 이 때 해당 클래스를 파싱해서 @Bean이 있는 메소드를 찾아 빈을 생성해준다.
여기서 주의할 점은 빈을 등록할 때에는 메소드 이름으로 빈 이름이 결정되기 때문에, 중복된 빈 이름이 생성되지 않도록 주의해야 한다.
@Configuration
public class S3Config {
@Bean
public AmazonS3Client amazonS3Client() {
BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
return (AmazonS3Client) AmazonS3ClientBuilder.standard()
.withRegion(region)
.withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
.build();
}
}
@Configuraion 안에서 @Bean이 빈으로 등록되는 과정과 둘이 함께 사용되어야 하는 이유는 https://mangkyu.tistory.com/75 다음 글 참고