pom.xml
- 스프링 컨테이너 설정 파일이다.
applicationContext.xml
- 컨테이너 설정 파일임을 알 수 있다.
- GenericXmlApplicationContext은 실무에서 사용하지 않는 실습용이다.
컨테이너란?
1. 개발자를 대신해서
2. 객체를 생성(관리) 해주는 것
- 생성 == new
- 서블릿 컨테이너 (톰캣)
new FC(); / fc.doGet(); / fc.doPost();
IoC
제어의 역행
"apple" 호출한 new 와 "samsung"을 호출한 new가 다름
<bean class = "test.Iphone" id="apple">
<property name="watch" ref="aw" />
<property name="num" value="1234" />
</bean>
<bean class = "test.GalaxyPhone" id="samsung">
<constructor-arg ref="gw" />
</bean>
"apple"를 호출한 new
- Setter 주입
: Web에서는 대부분 Setter 주입,
사용자에게 더 나은 경험을 제공하기 위함
== bean(객체)이 생성(new)되다가 예외가 발생하는 것을 방지할 수 있음.
- Setter 주입을 할 땐 기본 생성자를 활용한다!!
"samsung"을 호출한 new
- 생성자 주입
DI (의존성 주입)
의존성? == 어떤 메서드를 수행할 때 필요로 한다.
ex1) Controller에게 DAO 의존성이 있다.
ex2) DAO에게 conn, pstmt 의존성이 있다.
==> 어떤 객체 없이는 동작을 못한다.
@ 어노테이션 (애너테이션) 사용
.xml 파일로 <bean> 해서 객체를 new 하고 있었는데,
설정파일의 내용이 너무 과다해지면서 개발자들에게 불편함이 생김..
ex) bean을 몇만 개 혹은 그 이상 작성했는데, 어느 날 한 가지 기능이 안 됨!!
누가 xml 건든 게 아닌지 의심 >> 설정파일 확인해서 Action 검색하는데 해당 이름이 안 나옴
>> 그런데 어느 날 갑자기 기능이 다시 동작함.
>> 이름이 다른 상태로 new가 되고 있었다는 뜻!
이런 불편함을 해소하기 위해 @어노테이션 사용!!
하지만 어노테이션도 .xml에서 나온 것이다. 근본이 xml임!
web.xml
톰캣 서블릿 컨테이너가 자동으로 new 해주던 게 딱 하나 있는데,
>> FrontController이다.
Servlet 파일을 만들면 web.xml에 태그가 자동으로 추가된다.
현재 우리가 FC를 new 하지 않았기 때문에 bean이 있어야 하는데
내용이 확인되지 않는다.
이는 누군가가 설정을 해주었다는 의미인데,
FC 파일을 확인해 보면 @WebServlet 어노테이션이 해당 역할을 대신해주고 있음을 알 수 있다.
🍀 내용 정리!
1. 컨테이너란?
개발자 대신 객체를 생성, 관리해 주는 것
2. 스프링 프레임워크를 한마디로 요약하면?
IoC와 AOP를 지원하는 경량(POJO)의 프레임워크
3. IoC란?
제어의 역행
제어권을 컨테이너에게 준다는 뜻 (컨테이너가 new 한다는 뜻)
4. 컨테이너가 1개 == 톰캣(서블릿 컨테이너)
서블릿 타입의 객체만 new
new FrontController();
5. 컨테이너는 .xml(설정파일)이 있어야 동작을 함.
컨테이너와 xml은 1:1이다.
실습 때 factory(컨테이너) => applicationContext.xml
서블릿 컨테이너(톰캣) => web.xml
스프링 => pom.xml
6. 컨테이너가 new == <bean>
7. .xml 과도한 설정 → @ 어노테이션 설정을 개발
Setter주입처럼 .xml이 다소 올드하다 보니까,
@ 설정이 있다면 .xml 보다는 @ 으로 설정하는 것이 좋음!!
'Spring' 카테고리의 다른 글
[Spring] Spring의 구조와 Service (0) | 2024.10.06 |
---|---|
[Spring] @ 어노테이션 설정 (6) | 2024.10.06 |
[Spring] 의존성 주입 (0) | 2024.10.06 |
[Spring] 결합도가 높은 프로젝트의 형태 (1) | 2024.10.03 |
[Spring] 스프링 프레임워크 구조 (1) | 2024.10.02 |