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());
}


}

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을 탈피할 수 있다.

댓글

이 블로그의 인기 게시물

로컬 Tomcat 서버 실행속도 개선

2019.05.23 - SQLAlchemy 의 객체 상태 관리 (expire, refresh, flush, commit) 에 관한 이해

2020.02.17 Python의 multiprocessing 중 Pool.map(), chunksize에 관한 내용