[Spring] DI(Dependency Injection) 란?
[Spring] DI(Dependency Injection) 란?
DI(Dependency Injection) 란?
IoC(Inversion of Control)이라고도 표현하며, 객체 간의 의존 관계를 객체 자신이 아닌 외부의 조립기가 수행해 준다는 개념입니다.
의존할 객체를 지정하는 방법
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // 1.객체를 직접 만들어 사용 public class BoardService { private BoardDao boardDao = new BoardDao(); } // 2.객체를 주입 받아 사용 public class BoardService { private BoardDao boardDao; // 생성자에서 의존하는 객체를 전달받음 public BoardService(BoardDao boardDao) { this .boardDao = boardDao; } } Colored by Color Scripter cs
BoardDao 객체를 주입 받아 사용하는 경우 BoardServiceImpl 클래스 코드는 BoardDao 객체를 생성하는 코드가 포함되지 않습니다. 대신, 조립기의 역할을 하는 Assembler가 BoardDao 객체를 생성한 뒤 BoardServiceImpl 객체에 전달해 주게 됩니다. 이렇게 조립기가 의존 관계를 관리해 주는 방식을 DI(Dependency Injection)이라고 합니다.
Spring에서의 DI
스프링은 설정 파일이나 어노테이션을 통해서 객체 간의 의존 관계를 설정할 수 있도록 지원하고 있습니다. 따라서, 객체는 의존하고 있는 객체를 직접 생성하거나 검색할 필요가 없습니다.
DI을 적용하는 방법
1.Field Injection
1 2 3 4 5 6 7 8 9 10 @Service public class BoardService { @Autowired private BoardDao boardDao; public void doSomething() { } } cs
2.Setter based Injection
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @Service public class BoardService { private BoardDao boardDao; @Autowired public void setBoardDao(BoardDao boardDao) { this .boardDao = boardDao; } public void doSomething() { } } Colored by Color Scripter cs
3.Constructor based Injection
1 2 3 4 5 6 7 8 9 10 11 12 13 14 @Service public class BoardService { private final BoardDao boardDao; @Autowired public BoardService(BoardDao boardDao) { this .boardDao = boardDao; } public void doSomething() { } } Colored by Color Scripter cs
from http://tychejin.tistory.com/165 by ccl(A) rewrite - 2020-03-22 20:54:26
댓글
댓글 쓰기