#1. 어노테이션 정리

HR·2024년 4월 9일
0

Spring

목록 보기
5/5

프로젝트 진행하면서 사용한 어노테이션 정리

1. @RequiredArgsConstructor

스프링에서 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;
    
}

2. @NoArgsConstructor & @AllArgsConstructor

파라미터가 없는, 또는 클래스의 모든 필드 값을 파라미터로 받는 생성자를 자동으로 생성한다. 해당 어노테이션 사용시 클래스에 명시적으로 선언된 생성자가 없더라도 인스턴스를 생성할 수 있다.

// 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;
    
    // 작성하지 않아도 생성 가능
}

3. @Bean & @Configuration

스프링 컨테이너에 빈 객체를 해당 어노테이션을 사용해 수동으로 등록할 수 있다.

만약 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 다음 글 참고

profile
Hello World :D

0개의 댓글