본문 바로가기

Spring

@Configuration을 이용한 설정

반응형

applicationContext.xml과 같은 XML 파일을 사용하지 않고 JAVA 5 이상 버전 부터는 @Configuration 어노테이션을 사용하여 Bean 설정이 포함된 클래스라는것을 명시한다.

 

<bean> -> @Bean 으로 바뀌었다.!

 

 

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@Import(CompanyConfig.class)
public class BeanConfig {
    @Bean
    public WorkManager employee() {
        return new Employee();
    }

    @Bean
    public WorkManager boss() {
        return new Boss();
    }

    @Bean
    public WorkService yourWorkService() {
        WorkService workService = new WorkService();
        workService.setWorkManager(employee());
        return workService;
    }

    @Bean
    public WorkService myWorkService() {
        WorkService workService = new WorkService();
        workService.setWorkManager(boss());
        return workService;
    }
}

 

@Bean 어노테이션으로 등록한 Bean을 사용할 때는 AnnotationConfigApplactionCntext를 사용한다.

AnnotationConfigApplactionCntext 의 인스턴스를 생성한 뒤에 빈 설정 정보가 담겨 있는 BeanConfig 클래스파일을 등록하고 AnnotationConfigApplicatoinContext를 리프레시해 준다.

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class JavaConfigSpringApp {
    public static void main(String ar[]){
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        context.register(BeanConfig.class);
        context.refresh();

        WorkService yourWorkService = context.getBean("yourWorkService", WorkService.class);
        yourWorkService.askWork();

        WorkService myWorkService = context.getBean("myWorkService", WorkService.class);
        myWorkService.askWork();

        context.close();
    }
}

 

@import 어노테이션 사용

 - 설정해야 할 내용이 많은 경우 설정 내용을 파일별로 분리하고 Import 어노테이션을 사용한다.

 - Company라는 클래스를 추가하고, 이클래스는 다른 설정 파일에서 빈 설정을 할 수 있도록 해보자.

 

Company라는 Class를 추가하고 이클래스는 다른 설정 파일에서 빈 설정을 할 수있다.

 

public class Company {
    private String name;

    Company(String name) {
        this.name = name;
    }

    public String getName() {
        System.out.println(name);
        return name;
    }
}

Company 클래스는 name을 문자열 타입 필트로 가지고 있고 생성할 때 name을 입력받도록 되어있다. 이제 이것을 Bean으로 등록한다.

 

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class CompanyConfig {
    @Bean
    public Company company() {
        return new Company("jpub");
    }
}

 

CompanyConfig 클래스는 Compnay를 Bean으로 등록하는 역할을 한다. CompanyConfig클래스가 동작할려면 어떻게 해야할까?? Beanconfig에 등록해주면 된다.

 

@Configuration
@Import(CompanyConfig.class)
public class BeanConfig {

 

이렇게 등록했으면 BeanConfig 클래스는 Boss, Employee , Company를 세개 동시에 사용할 수 있다

(일종의 상속 개념을 Bean한것과 같은거 같다. extends를 이용한 상속 느낌?)

 

 

import org.springframework.context.annotation.AnnotationConfigApplicationContext;


public class ConfigImportSpringApp {
    public static void main(String ar[]) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(
                BeanConfig.class
        );

        WorkService yourWorkService = context.getBean("yourWorkService", WorkService.class);
        yourWorkService.askWork();

        WorkService myWorkService = context.getBean("myWorkService", WorkService.class);
        myWorkService.askWork();

        Company company = context.getBean("company", Company.class);
        company.getName();

        context.close();
    }
}

 

@PostCnstruct

 

초기화 시에 호추뢴 메서드에 @PostConstruct 어노테이션을 추가하면 빈이 초기화될 때 호출된다.

별도로 설정과 클래스를 매핑하지 않고도 사용할 수 있다. 

@PostConstruct
	public void onCreated(){
    	System.out.println("boss 초기화");
    }

 

@PreDestroy 종료시에 함수를 호출한다 . 별도의 매핑이 필요없다는 특징을 가진다.

반응형

'Spring' 카테고리의 다른 글

Spring : @Async 비동기처리 안될 때  (1) 2021.01.13
스프링 MVC  (0) 2020.08.09
bean 이란  (0) 2020.08.09
Spring : 이미지업로드 및 이미지 반환.  (0) 2020.07.31
스프링 Swagger 커스텀 마이징을 해보자  (0) 2020.07.24