본문 바로가기
I LEARNED/TIL

TIL_ 스프링 IOC 컨테이너 -빈 사용방법

by veganwithbacon 2022. 8. 5.
반응형

1. @Autowired

       - 멤버변수 선언 위에 @Autowired → 스프링에 의해 DI (의존성 주입) 됨

@Component
public class ProductService {
		
    @Autowired
    private ProductRepository productRepository;
		
		// ...
}

      - '빈' 을 사용할 함수 위에 @Autowired → 스프링에 의해 DI 됨

@Component
public class ProductService {

    private final ProductRepository productRepository;

    @Autowired
    public ProductService(ProductRepository productRepository) {
        this.productRepository = productRepository;
    }
		
		// ...
}

 

> @Autowired 적용 조건

       - 스프링 컨테이너에 의해 관리되는 클래스에서만 가능

> @Autowired 생략 조건

       - Spring 4.3 버젼 부터 @Autowired 생략가능

       - 생성자 선언이 1개 일 때만 생략 가능

              파라미터가 다른 생성자들 

public class A {
	@Autowired // 생략 불가
	public A(B b) { ... }

	@Autowired // 생략 불가
	public A(B b, C c) { ... }
}

                

       - Lombok 의 @RequiredArgsConstructor 를 사용하면 다음과 같이 코딩 가능

@RequiredArgsConstructor // final로 선언된 멤버 변수를 자동으로 생성합니다.
@RestController // JSON으로 데이터를 주고받음을 선언합니다.
public class ProductController {

    private final ProductService productService;
    
    // 생략 가능
		// @Autowired
		// public ProductController(ProductService productService) {
		//     this.productService = productService;
		// }
}

 

2. ApplicationContext

       - 스프링 IoC 컨테이너에서 빈을 수동으로 가져오는 방법

@Component
public class ProductService {
    private final ProductRepository productRepository;

    @Autowired
    public ProductService(ApplicationContext context) {
        // 1.'빈' 이름으로 가져오기
        ProductRepository productRepository = (ProductRepository) context.getBean("productRepository");
        // 2.'빈' 클래스 형식으로 가져오기
        // ProductRepository productRepository = context.getBean(ProductRepository.class);
        this.productRepository = productRepository;
    }

		// ...		
}
반응형

'I LEARNED > TIL' 카테고리의 다른 글

TIL_@Column #Spring  (0) 2022.08.07
TIL_@RequestMapping #Spring  (0) 2022.08.06
TIL_ 스프링 IOC 컨테이너 -빈등록  (0) 2022.08.05
TIL_ResponseBody #Spring  (0) 2022.08.04
[TIL] SpringMVC동작이해  (0) 2022.08.04

댓글