딱 한번만 메모리에 뜨게 되고, 매번 new하지 않고 같은 객체로 관리할 수 있다.(싱글톤 방식)
클래스의 메소드에서 스프링이 관리하는 같은 오브젝트를 가져와서 사용할 수 있다.
-> 하나의 오브젝트를 필요한 곳에서 공유하면서 사용할 수 있다. 이를 DI(Dependency Injection)(의존성 주입)라고 한다.
DI를 하기 위해서는 객체를 Bean등록이 되어 있어야 한다. 객체를 보낼놈, 받을놈 전부다 등록이 되야한다.
IoC 컨테이너 설정
- Bean Factory라고도 한다.
- IoC컨테이너가 관리하는 객체를 bean이라고 한다.
- bean 등록은 xml / 어노테이션을 통해서 가능하다.
1. XML 파일 등록
xml파일을 이용하여 설정하게 된다면 코드와 의존성을 주입하는 부분을 분리할 수 있다.
따라서 유지보수성을 높일 수 있다. 하지만 시스템이 커지다보면 xml파일이 너무 많아 오히려 유지보수가 힘들다.
장점: 각 객체들 간 의존관계를 한 눈에 볼 수 있다.
단점: 규모가 커짐에 따라 xml에 기술할 내용이 많아지면 생산성이 떨어진다.
2. 어노테이션 등록
xml로 했을 때, 규모가 커지면서 생기는 문제점 때문에 어노테이션이 등장했다.
장점: 보다 더 직관적인 코드 작성이 가능하다.
나의 프로젝트에 대입하여 알아보겠다.
아래 프로젝트는 xml / 어노테이션 방식이 사용되었다.
property - 수정자
constructor-arg - 생성자
ref - 해당 프로퍼티로 주입할 빈의 참조를 의미한다.
(dataSource)DBCP -
(transactionManager - sqlSessionFactoryBean - sqlSessionTemplate)MyBatis -
(requestDao)DAO -
(requestService)Service -
(requestController)Controller로 연결된다
자 일단 bean등록은 되었다. 그렇다면 우리는 스프링에 등록된 객체를 어떻게 가져와서 주입할 것인가?
주입방법은 3가지가 있다.
1. 생성자 주입
- Null을 주입하지 않는 한 NullPointException이 발생하지 않는다.
- final 키워드를 사용하여 객체의 불변을 유지할 수 있다.
- 개발자의 실수로 빈의 주입이 이루어지지 않았을 경우 final 키워드를 사용하면 컴파일 시점에서 오류를 잡아낸다.
- 순환 참조를 방지할 수 있다.
2. 필드 주입
- 간단한 코드로 구현이 가능하지만, 추후 변경할 수 있는 방법이 없다.
3. 수정자 주입(Setter 주입)
- public이 의무화되는 메서드에서 개발자가 임의로 호출할 수 있기 때문에 보안상에 문제가 있다.
@Autowired
스프링 컨테이너에서 해당 스프링 빈을 찾아서 주입하는 어노테이션이다.
생성자, 필드, 수정자에서 사용가능하다.
MyBatis와 DBCP는 xml에 bean등록하고, 사용자가 주입하는게 아닌 스프링이 알아서 주입해준다.
참고하면 좋은 글: https://cheershennah.tistory.com/227
'Spring > Spring' 카테고리의 다른 글
스프링 MVC 흐름 (0) | 2022.02.01 |
---|---|
스프링의 작동원리(서블릿 컨테이너) (0) | 2022.01.31 |
Spring의 작동 원리 ( web.xml) (0) | 2022.01.17 |
Spring의 작동 원리 (http/tomcat) (0) | 2022.01.17 |
Spring 개념 (0) | 2022.01.13 |
댓글