2020.04.25 TIL 스프링 - XML 없이 Configuration 하기
## Configuration 클래스 작성
1. Create java class with @Configuration, @ComponentScan annotation
@Configuration
@ComponentScan(PACKAGE_NAME)
public class MyConfig {}
2. Load Config class context at main file.
main {
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(MyConfig.class);
}
## Bean도 SpringContainer Config안에서 만들기
1. Config Class에서 @Bean annotation으로 바로 Bean을 주입할 수 있다.
- 사전에 필요한 사항은 Bean 클래스가 구현할 인터페이스, Bean 클래스이다.
@Configuration
public class MyConfig() {
@Bean
public Something something() {
// 이 때 MySomething이 Bean으로 동작할 클래스로, Something을 구현하고 존재하고 있어야 함.
return new MySomething();
}
@Bean
public Another another() {
// 이 때 MyAnother Bean은 something을 inject 받는 Bean이다.
return new MyAnother(something()); //
}
}
## Full Code
```
Main
public class SwimJavaConfigDemoApp {
public static void main(String[] args) {
// Load Config written in class.
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(SportConfig.class);
SwimCoach swimCoach = ctx.getBean("swimCoach", SwimCoach.class);
System.out.println(swimCoach.getDailyWorkout());
System.out.println(swimCoach.getDailyFortune());
System.out.println(swimCoach.getEmail());
System.out.println(swimCoach.getTeam());
ctx.close();
}
}
Config
@Configuration
@PropertySource("classpath:sport.properties")
public class SportConfig {
@Bean
public FortuneService sadFortuneService() {
return new SadFortuneService();
}
@Bean
public Coach swimCoach() {
return new SwimCoach(sadFortuneService());
}
}
```
나머지는 기존과 동일하다.
이로서 XML을 탈피할 수 있다.
1. Create java class with @Configuration, @ComponentScan annotation
@Configuration
@ComponentScan(PACKAGE_NAME)
public class MyConfig {}
2. Load Config class context at main file.
main {
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(MyConfig.class);
}
## Bean도 SpringContainer Config안에서 만들기
1. Config Class에서 @Bean annotation으로 바로 Bean을 주입할 수 있다.
- 사전에 필요한 사항은 Bean 클래스가 구현할 인터페이스, Bean 클래스이다.
@Configuration
public class MyConfig() {
@Bean
public Something something() {
// 이 때 MySomething이 Bean으로 동작할 클래스로, Something을 구현하고 존재하고 있어야 함.
return new MySomething();
}
@Bean
public Another another() {
// 이 때 MyAnother Bean은 something을 inject 받는 Bean이다.
return new MyAnother(something()); //
}
}
## Full Code
```
Main
public class SwimJavaConfigDemoApp {
public static void main(String[] args) {
// Load Config written in class.
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(SportConfig.class);
SwimCoach swimCoach = ctx.getBean("swimCoach", SwimCoach.class);
System.out.println(swimCoach.getDailyWorkout());
System.out.println(swimCoach.getDailyFortune());
System.out.println(swimCoach.getEmail());
System.out.println(swimCoach.getTeam());
ctx.close();
}
}
Config
@Configuration
@PropertySource("classpath:sport.properties")
public class SportConfig {
@Bean
public FortuneService sadFortuneService() {
return new SadFortuneService();
}
@Bean
public Coach swimCoach() {
return new SwimCoach(sadFortuneService());
}
}
Bean
public class SwimCoach implements Coach {
private FortuneService fortuneService;
@Value("${foo.email}")
private String email;
@Value("${foo.team}")
private String team;
public SwimCoach(FortuneService theFortuneService) {
fortuneService = theFortuneService;
}
@Override
public String getDailyFortune() {
return "Swim 1000 meteres as a warm up";
}
@Override
public String getDailyWorkout() {
return fortuneService.getFortune();
}
public String getEmail() {
return email;
}
public String getTeam() {
return team;
}
}
Properties
// 위치 classpath:sport.properties
foo.email=helloworld@naver.com
foo.team=AwesomeJavaCoders
```
나머지는 기존과 동일하다.
이로서 XML을 탈피할 수 있다.
댓글
댓글 쓰기