@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);
}
}
greeting.english=hello world
greeting.korean=안녕 세상
@ConfigurationProperties
@AllArgsConstructor
@Getter
@ConfigurationProperties("greeting")
public class GreetingProperties {
private String english;
private String korean;
}
@RequiredArgsConstructor
@Component
public class AppStartupRunner implements ApplicationRunner {
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=안녕 세상