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 |