-
04 Spring DI 활용하기(1) - 이론Spring/02 Spring DI와 AOP 2023. 6. 26. 22:47반응형
Spring DI 활용하기(1) - 이론
1) 빈(bean)이란?
- JavaBeans - 재사용 가능한 컴포넌트, 상태(iv), getter&setter, no-args constructor
↓ 복잡 → 간단
- Servlet & JSP bean - MVC의 Model, EL, scope, JSP container가 관리
↓ 간단 → 대기업(복잡)
- EJB (EnterPrise Java Beans) - 복잡한 규칙, EJB container가 관리
↓ 대기업(복잡) → 심플 //로드 존슨(고수)
- Spring Bean - POJO Plain Old Java object. 단순, 독립적, Spring container가 관리
2) BeanFactory와 ApplicationContext
Bean - Spring Container가 관리하는 객체
Spring container - Bean 저장소, Bean을 저장, 관리(생성, 소멸, 연결)
1. BeanFactory - Bean을 생성, 연결 등의 기본 기능을 정의(인터페이스)
2. ApplicationContext - BeanFactory를 확장해서 여러 기능을 추가 정의(인터페이스)
3) ApplecationContext의 종류
4) Root AC와 Servlet AC
1 톰캣이 시작할 때 이벤트 처리기를 체크하면서 new XmlWebApplicationContext( ) 생성해준다
2 기본적으로 2개의 WebApplicationContext를 생성해준다 Root AC Servlet AC
3 생성할 때 설정을 contextConfigLocation가 처리한다
- XmlWebApplicationContext(/WEB-IMF/spring/root-context.xml)로 처리한다
DS → 서블릿으로 등록
1 servlet-context.xml이 new XmlWebApplicationContext( )를 생성해준다
결과
① new XmlWebApplicationContext( )과 ② new XmlWebApplicationContext( ) 연결해주고
①부모 ②자식관계를 가지게 된다
>> 어떤 Bean을 찾을 때 자식에서 먼저 찾고 다음 부모를 찾게 된다
>> 자식이 여러개 일 수 있다, 공통적인 Bean을 부모에 넣고 개별적 Bean을 자식에 넣는다
1 XmlWebApplicationContext에 attributes에 저장
2 /ch3의 서블릿이 children이라는 이름에 Map으로 관리되고 있다
그 중 하나가 appServlet이고 appServlet은 이름이고 실제로는 DispatcherServlet이다
(DispatcherServle이 서블릿이기 때문에 등록되어 있다)
3 DispatcherServlet 생성되면서 멤버로 contextClass(인스턴스변수iv)를 가지고 있다
4 contextClass에는 Servlet XmlWebApplicationContext를 가지고 있다
5) ApplicationContext의 주요 메서드
int getBeanDefinitionCount( ) - 정의된 빈의 갯수
String[ ] getBeanDefinitionNames( ) - 정의된 빈의 이름
Object getBean(Class<T> requiredType, Object....args) getBean - 빈 얻기
Object getBean(Class<T> requiredType)
Object getBean(String name, Class<T> requiredType)
Object getBean(String name, Object...args)
Object getBean(String name)
Class getType(String name)
Map getBeansOfType(Class<T> type)
Map getBeansOfType(Class<T> type, boolean includeNonSingletons, boolean allowEagerlnit)
String[ ] getAliases(String name)
String[ ] getBeanNamesForAnnotation(Class annotation Type)
String[ ] getBeanNamesForType(Class type, boolean includeNonSingletons,
boolean allowEagerlnit)
String[ ] getBeanNamesForType(Class type)
String[ ] getBeanNamesForType(ResolvableType type)
boolean isPrototype(String name)
boolean isSingleton(String name)
boolean isTypeMatch(String name, Class<T> typeToMatch) isTypeMatch - 타입확인
boolean isTypeMatch(String name, ResolvableType typeToMatch)
boolean containsBean(String name) containsBean - 빈있는지 확인
boolean containsBeanDefinition(String beanName)
boolean containsLocalBean(String name)
Annotation findAnnotationOnBean(String beanName, Class annotationType)
findAnnotationOnBean - 빈에 에너테이션이 있는지 확인
ApplicationContextTest.java
① <contxet:companent-scan/>이 homeController를 검색 해준다
② servlet-context에서 homeController를 뺼 수 없다
③ DispatcherServlet에서 homeController를 requestmapping해야된다
HomeController.java
root-context.xml
추가하여 rootAc.getBeanDefinitionNames( );를 호출하게 되면
>> InternalResourceViewResolver를 확인 할 수 있다
>> sevlet-context에서 → root-context로 추가되는 빈들이 어떤 것들이 있는 지 테스트할 수 있다
톰캣 흐름
root-context → appServlet(DispatcherServlet)은
XmlWebApplicationContext(ServletApplication-context) 생성하고, 설정파일을 servlet-context.xml사용
※DispatcherServlet 내부에 ServletApplication-context 생성
반응형'Spring > 02 Spring DI와 AOP' 카테고리의 다른 글
06 Spring으로 DB연결하기 (0) 2023.06.30 05 Spring DI 활용하기(2) - 이론 (0) 2023.06.28 03 Spring DI 활용하기-실습 (0) 2023.06.23 02 Spring DI 흉내내기(2) (0) 2023.06.22 01 Spring DI 흉내내기(1) (0) 2023.06.21