ㅇ Autowired 의 개념에 대해 명확하게 집고 넘어가기
ㅇ DI 연습과 더불어 생명주기
ㅇ 지난번엔 생성자 함수 여부 등을 신경 써서 빈을 생성했음
ㅇ 1~4 까지는 Simple Spring Utility Project 로 만듦
ㅇ 이번시간엔 Spring MVC Project 로 만들것. 더 많은 라이브러리를 사용함으로써 다양한 방식으로 빈을 생성할 수 있음
1. Spring MVC Project 로 프로젝트 생성하기(더 많은 라이브러리를 통해 다양한 방식의 빈 생성 만들기 위해)
2. pom.xml 에 lombok dependency 복사해놓기 (mvnrepository.com)
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 해주기
이번 단 최종정리
ㅇ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 |