LANGUAGE/SPRING

SPRING #5 DI 자동설정

옐옐루 2022. 7. 13. 10:57

ㅇ Autowired 의 개념에 대해 명확하게 집고 넘어가기 

ㅇ DI 연습과 더불어 생명주기 

ㅇ 지난번엔 생성자 함수 여부 등을 신경 써서 빈을 생성했음

ㅇ 1~4 까지는 Simple Spring Utility Project 로 만듦

ㅇ 이번시간엔 Spring MVC Project 로 만들것. 더 많은 라이브러리를 사용함으로써 다양한 방식으로 빈을 생성할 수 있음 


 


1. Spring MVC Project 로 프로젝트 생성하기(더 많은 라이브러리를 통해 다양한 방식의 빈 생성 만들기 위해)

프로젝트 생성시 선택해야 할 것

2. pom.xml 에 lombok dependency 복사해놓기 (mvnrepository.com)

mvnrepository 에서 긁어온 dependency

3. 자바소스는 src/main/java에 , 객체생성 및 빈생성은 scr/main/resources 에 

4. com.lec.ch03.ex1 에 Student class 생성해주기 

 

ㅇ 변수 선언 해주고, getter & setter(@Data)

ㅇ lombok으로 매개변수 있는 생성자 함수 만들경우 매개변수의 갯수를 지정하지 못하니, 매개변수를 내가 원하는대로 골라 생성자 함수를 만들경우에는 lombok 활용하지 않고 아래에 생성자 함수를 내가 만들어 준다 

ㅇ 이 Student 클래스를 의존하는 아이를 만들러 가보자 (같은 패키지에 Studentinfo 만들어주기)

 

5. Studentinfo 생성해주기 

ㅇ Studentinfo가 의존하는(필요한) 클래스를 선언해주기 

의존함을 뜻하는 선언문

ㅇ 만들어 놓은 Student bean 이 있으면 

ㅇ xml 에 student 객체 만들어 놓음 setter를 만들어 놓지 않아도 달라붙음

6. src/main/resources 의 META-INF 에 ex1 폴더를 만들고 그 안에 applicationCTX1.xml 생성해주기 

* 우리가 원하는건 메인함수에서 StudentInfo 객체 필요함, 근데 저걸 쓰려면 Student 객체도 필요함 

* 빈과 빈끼리 연결하려면 StudentInfo에 써놓은 Autowired를 컴퓨터가 인식해줘야함 

* 따라서 Autowired를 인식하는 태그를 써주어야함 

 

 

7. Namespaces 들어가서 context 체크하고, context 태그 쓰기 

 

 

8. Autowired 어노테이션 확인하는 아이 

 

ㅇ 알아서 값들을 context를 읽기 때문에 빈들만 만들어도 되고, property 값 하나하나 안해줘도 됨 

 

9. Family 라는 클래스 만들어 주기 

 

ㅇ 매개변수 없는 생성자 함수는 현재 존재하지 않는 상태 

ㅇ papaName과 mamiName 으로만 생성자 함수를 만들것이기 때문에 어노테이션을 따로 써주지 않았음

ㅇ tostring과 getter , setter 만 만들어주는 어노테이션 @Data를 써줌 

 

10. Family bean 만들러 가기 - xml 화일 만들기 

ㅇ Namespaces 에 가서 c랑 p에 체크해놓기  - c태그랑 p태그 이제부터 이용 가능 

 

ㅇ 매개변수 없는 생성자함수가 없기 때문에 이렇게 하면 당연히 오류가 나고, 그럼 bean안에 constructor 해주면 됨

하지만 이번엔 c:을 활용해서 작성해보겠음 

ㅇ c는 constructor을 의미하고 p는 peropety를 의미함. papaName과 mamiName은 매개변수 있는 생성자 함수로 만들어 줬기 때문에 무조건 constructor을 만들어 주어야 하고, sisterName과 brotherName은 생성자 함수로 안만들어 줬기 때문에 property 를 활용해서 값을 세팅 해주면 됨 

 

 

11. 메인함수에서 applicationCtx1 과 applicationCTX2 두개를 파싱해주면 됨 

ㅇ resourceLocation 이 2개가 있어야함 

ㅇ AbstractApplicationContext ctx 는 컨테이너를 가르키는 변수임 (컨테이너를 생성하려고 하면 처음에 빈 컨테이너가 만들어짐 , 그리고 나서 컨테이너를 만들기 위한 환경까지 셋팅이 됨 env(속성1,속성2,속성3 등) 파싱을 하고 난 뒤에 객체들을 컨테이너에 담게 됨 

ㅇ빈을 만들어놓은 상태에서 이제 외부에서 가지고 오면됨 Student student = ctx.getBean("student", Student.class)

ㅇapplicationCTX1에 만들어놓은 빈 객체 (Student, Studentinfo)두개 불러오기  

ㅇ student빈 에서 불러온 내용과, studentinfo에서 불러온 내용이 동일해야함 

ㅇ info단에 @Autowired 안해주면 studentinfo에 null 이 들어오게 됨 

ㅇ ctx.close 해주기 

testmain단

 

 



이번 단 최종정리 

Student Class = 변수선언 및 매개변수 있는 생성자 함수 

StudentInfo Class = Student 를 의존하는 아이 (나중에 불렀을 경우 student의 정보가 동일하게 들어옴)

applicationCTX1 = 빈 객체를 생성해주기 , 빈 내부에 c 와 p를 통해 값을 세팅하기 여기서 c와 p를 사용하기 위해선 Namespaces 단에 들어가 c와 p를 체크해주어야함 

-여기서 c 는 constructor(생성자함수에 매개변수로 넣어준 아이들), property(생성자 함수에 매개변수로 안넣어준 아이들)

- <context:annotation-config> 해주면 , 의존받는 아이들 빈만 생성해주면 되고, 따로 값을 세팅 안해줘도 됨 

- 리소스location 설정해놓고, ctx라는 컨테이너를 생성해준 뒤 그 곳에 내가 만들어 놓은 빈이 있는 주소를 넣어주면 컨테이너 안에 객체들이 생성 되게 됨 

- 그 생성된 ctx 컨테이너 속에 담긴 빈을 불러와주고 sysout으로 뿌려주면 됨 


반응형

'LANGUAGE > SPRING' 카테고리의 다른 글

SPRING #7 외부파일을 이용한 설정  (2) 2022.07.13
SPRING #6 빈의 생명주기  (0) 2022.07.13
SPRING #4 DI 개념 및 활용  (0) 2022.07.12
SPRING #2 프로젝트생성하기  (0) 2022.07.12
SPRING #1설치하기  (0) 2022.07.12