개발/Java & Kotlin

[Spring] 스프링 DI (2)

devhooney 2022. 6. 29. 21:55
728x90

스프링 코어 중 하나인 DI에 대한 개요, 특징, 이용 방법 및 DI를 어떻게 이용할 것인가에 대한 설명

 

2.5 JavaConfig를 이용한 DI

- XML파일 작성 대신에 Java 코드를 작성한다.

2.5.1 예제를 이용한 JavaConfig

https://devhooney.tistory.com/9

 

스프링 DI (1)

스프링 코어 중 하나인 DI에 대한 개요, 특징, 이용 방법 및 DI를 어떻게 이용할 것인가에 대한 설명 2.1 DI란 - DI는 '의존 관계의 주입'이다. - 오브젝트 사이의 의존 관계를 만드는 것. -> 오브젝트

devhooney.tistory.com

- 이 글에서 작성했던 ProductService, ProductDao 등의 샘플을 JavaConfig로 수정한다.

 

- AppConfig.java

@Configuration
public class AppConfig {
	@Bean
    public ProductServiceImpl productService() {
    	return new ProductServiceImpl();
    }
    
    @Bean
    public ProductDaoImpl productDao() {
    	return new ProductDaoImpl();
    }
}

- @Configuration은 이 Java클래스가 JavaConfig임을 나타내는 어노테이션이다.

- @Bean은 XML의 beam태그에 해당한다.

- 참조할 productDao는 어떤 수단으로 취득해야 한다.

(1) @Bean 메소드를 인수로부터 취득

- @Bean 메소드의 인수에 설정하고 싶은 오브젝트를 설정한다. 

- 그리고 인수를 이용해서 오브젝트를 생성한다.

...(생략)...
@Bean
public ProductService productService(ProductDao pd) {
	return new ProductServiceImpl(pd);
}
...(생략)...

 

(2) @Bean 메소드를 불러들여서 취득

- @Bean 메소드를 실행하고, 그 결과를 이용해서 인젝션을 실행한다.

...(생략)...
@Bean
public ProductDao productDao() {
	return new ProductDaoImpl();
}

@Bean
public ProductSerivce productService() {
	return new ProductServiceImpl(productDao());
}
...(생략)...

(3) @Autowired 프로퍼티에서 취득

- @Autowired 어노테이션을 설정해두면 DI 컨테이너의 오브젝트가 설정되고, 이것을 이용해서 오브젝트를 생성한다.

...(생략)...
@Autowired
private ProductDao pd;

@Bean
public ProductService productService() {
	return new ProductServiceImpl(pd());
}
...(생략)...
728x90

'개발 > Java & Kotlin' 카테고리의 다른 글

[Java] 람다와 스트림(4)  (0) 2022.07.01
[Java] 람다와 스트림(3)  (0) 2022.06.30
[Spring] 스프링 DI (1)  (0) 2022.06.29
[Java] 람다와 스트림(2)  (0) 2022.06.29
[Spring] @ResponseBody가 null만 가져올 때  (0) 2022.06.28