[Spring]어노테이션 정리

정원석·2024년 9월 11일

@RequiredArgsConstructor

  • 롬복 에서 제공하는 어노테이션으로 해당 필드에 대해 자동으로 생성자를 만들어준다.
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
public class HelloService {

    private final String message = "Hello, World!";
    
    public String getMessage() {
        return message;
    }
}

@Autowired

  • 이 어노테이션을 사용하면 Spring 컨테이너가 자동으로 지정된 타입의 빈을 해당 필드, 메소드, 또는 생성자에 주입
  • 의존성 주입을 위해 사용되는 어노테이션

@Component

  • 빈 등록
@Component
public class EnglishFarewell implements Farewell {

    @Override
    public void sayGoodBye() {
        System.out.println("good bye");
    }
}

#Configuration + @Bean

  • 메서드의 리턴값을 빈으로 등록
@Configuration
public class GreetingConfig {

    @Bean
    Greeting englishGreeting() {
        return new EnglishGreeting();
    }
    
}

@Conditional

  • 설정된 모든 Condition 인터페이스의 조건이 TRUE 인 경우 동작
  • 특정 조건에서만 빈이 동작하길 원할 때 사용
public class MyCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
           return true;
    }
}
  • @Conditional(MyConditional.class) 와 같이 사용
  • MyCondition.class 의 matches의 반환값이 true일 때 MyConfig가 동작
@Configuration
@Conditional(MyCondition.class)
public class MyConfig {

    @Bean
    public MyBean myBean() {
        return new MyBean();
    }

    @Bean
    public MyBean2 myBean2() {
        return new myBean2();
    }
}

@ConfigurationOnBean

  • Bean이 이미 설정된 경우에 동작
  • MyService 타입의 Bean이 BeanFactory에 이미 등록된 경우에 동작
  • Configuration이 AutoConfiguration에 등록된 경우에 사용할 수 있다.
@Configuration
   public class MyAutoConfiguration {
  
       @ConditionalOnBean
       @Bean
       public MyService myService() {
           ...
       }
  
   }

@ConfigurationOnMissingBean

  • BeanFactory에 Bean이 설정되지 않은 경우에 동작
  • MyService 타입의 Bean이 BeanFactory에 등록되지 않은 경우에 동작
  • Configuration이 AutoConfiguration에 등록된 경우에 동작
@Configuration
   public class MyAutoConfiguration {
  
       @ConditionalOnMissingBean
       @Bean
       public MyService myService() {
           ...
       }
  
   }

@Value 바인딩

  • 특정 변수를 환경변수에 저장하여 사용하는 방법
@Component
public class AppStartupRunner implements ApplicationRunner {

    @Value("${greeting.english}")
    private String english;

    @Value("${greeting.korean}")
    private String korean;

    @Override
    public void run(ApplicationArguments args) {
        System.out.println(english);
        System.out.println(korean);
    }
}
// application.properties
greeting.english=hello world
greeting.korean=안녕 세상

@ConfigurationProperties

  • value와 같지만 선언 방식만 다르다.
@AllArgsConstructor
@Getter
@ConfigurationProperties("greeting")
public class GreetingProperties {
    private String english;
    private String korean;
}

@RequiredArgsConstructor
@Component
public class AppStartupRunner implements ApplicationRunner {

    //TODO-4 생성한 GreetingProperties 를 Bean 처럼 사용할 수 있다.
    private final GreetingProperties greeting;

    @Override
    public void run(ApplicationArguments args) {
        System.out.println(greeting.getEnglish());
        System.out.println(greeting.getKorean());
    }
}

@SpringBootApplication
@EnableConfigurationProperties(GreetingProperties.class)
public class Main {

    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }

}
greeting.english=hello world
greeting.korean=안녕 세상
profile
Back-End-Dev

0개의 댓글