ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 - MVCModel, EL, scope, JSP container가 관리

                  ↓ 간단 대기업(복잡)

    - EJB (EnterPrise Java Beans) - 복잡한 규칙, EJB container가 관리

                  ↓ 대기업(복잡) 심플 //로드 존슨(고수)

    - Spring Bean - POJO Plain Old Java object. 단순, 독립적, Spring container가 관리

     

     

    2) BeanFactoryApplicationContext

    Bean - Spring Container가 관리하는 객체

     

    Spring container - Bean 저장소, Bean을 저장, 관리(생성, 소멸, 연결)

       1. BeanFactory - Bean을 생성, 연결 등의 기본 기능을 정의(인터페이스)

       2. ApplicationContext - BeanFactory를 확장해서 여러 기능을 추가 정의(인터페이스)

     

     

    3) ApplecationContext의 종류

     

     

    4) Root ACServlet AC

    1 톰캣이 시작할 때 이벤트 처리기 체크하면서 new XmlWebApplicationContext( ) 생성해준다

    2 기본적으로 2개의 WebApplicationContext를 생성해준다 Root AC Servlet AC

    3 생성할 때 설정을 contextConfigLocation가 처리한다

    - XmlWebApplicationContext(/WEB-IMF/spring/root-context.xml)로 처리한다

     

    DS 서블릿으로 등록

    1 servlet-context.xmlnew 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에서 homeControllerrequestmapping해야된다

     

     

    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
Designed by Tistory.