카테고리 없음
Spring Context 사용하기
분리불안증후군
2020. 1. 11. 22:10
I. Spring Context 사용하기
Interface 정의
public interface Calculator {
int calc(int a, int b);
}
구현 클래스 정의
public class DefaultCalculator implements Calculator {
@Override
public int calc(int a, int b) {
return a + b;
}
}
Bean 정의파일 작성
@Configuration
public class AppConfig {
@Bean
Calculator calculator() {
return new DefaultCalculator();
}
}
Entry Point 작성
@SpringBootApplication
public class SpringTourApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(SpringTourApplication.class, args);
Calculator calculator = context.getBean(Calculator.class);
System.out.println(calculator.calc(1,2));
}
}
@SpringBootApplication대신 @EnableAutoConfiguration, @Import(AppConfig.class)를 써도 됨
II. @Autowire를 이용한 의존성 주입
클래스 추가하기(@Autowired 포함한)
public class FrontEnd {
@Autowired
Calculator calculator;
public int run(int a, int b){
return calculator.calc(a,b);
}
}
Bean 정의 파일 수정하기
@Configuration
public class AppConfig {
@Bean
Calculator calculator() {
return new DefaultCalculator();
}
@Bean
FrontEnd frontEnd() {
return new FrontEnd();
}
}
나머지는 동일하게 하고 실행하면 OK.
III. @Autowired말고 Setter로 주입을 할려면
FrontEnd클래스 수정하기
public class FrontEnd {
Calculator calculator;
public int run(int a, int b){
return calculator.calc(a,b);
}
public void set(Calculator calculator) {
this.calculator = calculator;
}
}
Bean 정의 파일 수정하기
@Configuration
public class AppConfig {
@Bean
Calculator calculator() {
return new DefaultCalculator();
}
@Bean
FrontEnd frontEnd() {
FrontEnd frontEnd = new FrontEnd();
frontEnd.setCalculator(calculator());
return frontEnd;
}
}
Entory Point 수정하기
//@SpringBootApplication
@EnableAutoConfiguration
@Import(AppConfig.class)
public class SpringTourApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(SpringTourApplication.class, args);
// Calculator calculator = context.getBean(Calculator.class);
// System.out.println(calculator.calc(1,2));
FrontEnd frontEnd = context.getBean(FrontEnd.class);
System.out.println(frontEnd.run(1,2));
}
}
III. ComponentScan을 이용하면
Configuration 파일 불필요: AppConfig.class 삭제
Entry Point 수정하기
@EnableAutoConfiguration
@ComponentScan
public class SpringTourApplication {...}
FrontEnd Class 수정하기
public class FrontEnd {
@Autowired
Calculator calculator;
...
}
Scan 대상 파일에 @Component Annotation 추가하기
@Component
public class DefaultCalculator implements Calculator {...}
@Component
public class FrontEnd {...}