사랑해 마니마니

Spring Context 사용하기 본문

카테고리 없음

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 {...}
Comments