ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SPRING] Spring Container
    SPRING 2021. 8. 21. 10:51

     

     

     

     

    스프링 컨테이너 종류에는 두가지가 있다.

     

    BeanFactory : <bean>객체를 생성하고 관리하는 가장 기본적인 컨테이너 기능 제공. 클라이언트의 요청에 의해서 <bean>객체가 생성되는 지연로딩(Lazy Loading) 방식을 사용한다. (스프링 ~3버전/ deprecated 되었다)

    DefaultListableBeanFactory 객체 인스턴스이다

    AbstractRefreshableApplicationContext 에서 따로 생성하고 있다.

    ApplicationContext : BeanFactory가 제공하는 <bean> 객체를 관리한다. 컨테이너가 구동되는 시점에 <bean>에 등록된 클래스들을 객체 생성하는 즉시로딩(pre loading)방식을 사용한다. (스프링 ~5버전)

    ClssPathXmlApplivationContext 객체의 인스턴스이다.

    DI(dependency injection)과 IoC(Inverse of conversion) 을 지원한다.

    기본적으로 AbstractApplicationContext의 Interface를 구현한 구현체이다.

    구현 클래스

    -GenericXmlApplicationContext : 파일 시스템이나 클래스 경로에 있는 XML 파일을 로딩하여 구동하는 컨테이너 (직접 빈을 생성하여 XML 설정 파일을 로딩하여 구동하기위해 사용)

    -XmlWebApplicationContext : 웹 기반의 스프링 어플리케이션을 개발할 때 사용하는 컨테이너

     

    ApplicationContext는 BeanFactory 기능을 포함하고 자체적으로 BeanPostProcessor, BeanFactoryPostProcessor등을 자체 처리할 수 있다. 

     

     

     


     

    BeanFactroy이용하기

     

     

     

     

    TV인터페이스 생성

     

     

     

     

    package polymorphism;
    
    public class TVUser {
    	public static void main(String[] arhs) {
    		BeanFactory factory = new BeanFactory();	
    		Scanner sc = new Scanner(System.in);
    		System.out.println("tv 종류 입력 :");
    		String tname = sc.nextLine();
    		TV tv = (TV)factory.getBean(tname);
    
    		tv.powerOn();
    		tv.powerOff();
    		tv.volumeUp();
    		tv.volumeDown();
            
    		
    	}
    }

     

     


    ApplicationContext 이용하기

     

    <bean> 엘리먼트를 사용하여 스프링 설정 파일에 클래스를 등록하자.

    속성

    -class : (필수속성) 패키지 경로와 클래스 명을 적어준다.

    -id : container 로부터 <bean> 객체를 요청할 때 사용한다. 유일해야하고 생략가능하다. 자바 식별자 작성 규칙을 따른다.

    -name : id와 같은 기능이지만 작성규칙을 따르지 않는다. 

    -init-method : spring container는 클래스 객체를 생성할 때 디폴트 생성자를 호출한다. 객체 생성 후 멤버변수 초기화 작업이 필요한 경우 사용 (init-mehod="init메소드이름")

    -destroy-method : spring container가 객체를 삭제하기 직전에 호출될 임의의 메소드를 지정

    -lazy-init : xml 로딩 시 객체 생성 여부 설정 (기본값은 false : xml 파일 로딩 시 자동으로 객체 생성 / true : xml 파일 로딩 시 자동으로 객체가 생성되지 않고 getBean으로 가져올 때 생성)

    -scope : 객체 범위 설정 ( 기본값은 singleton : 객체를 하나만 생성 / prototype : 객체를 getBean 할 때 생성. 즉, 새로운 주소값 부여)

     

    <import> 엘리먼트 를 사용하여 작성한 설정 파일들을 하나로 통합하자.

    <bean>으로 클래스를 등록하고 관리하지만 <bean> 외에도 예외처리, 다국어 처리등 다양한 설정이 필요하다. 이 때 기능별로 여러 xml 파일로 나눠 설정하는 것이 효율적인데, 그 분리하여 작성한 파일들을 통합할 때 사용한다.

     

    spring 컨테이너 구동

    AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml");

    spring 컨테이너로부터 필요한 객체 요청하기

    TV tv = (TV)factory.getBean("tv");
    
    tv.powerOn();
    tv.powerOff();
    tv.volumeUp();
    tv.volumeDown();

     

     

    package polymorphism;
    
    import org.springframework.context.support.AbstractApplicationContext;
    import org.springframework.context.support.GenericXmlApplicationContext;
    
    public class TVUser2 {
    
    	public static void main(String[] args) {
    		AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml");
    		
    		TV tv = (TV)factory.getBean("tv");
    		
    		tv.powerOn();
    		tv.powerOff();
    		tv.volumeUp();
    		tv.volumeDown();
    		
    		factory.close();
    	}
    
    }

     

     

     

     

     

     

    728x90

    'SPRING' 카테고리의 다른 글

    [SPRING] 데이터 추가, 변경, 삭제  (0) 2021.08.24
    [SPRING] Spring 의존성  (0) 2021.08.21
    [spring] 20AUG21 @Autowired @Service @Repository  (0) 2021.08.20
    [spring]의존 자동 주입 어노테이션  (0) 2021.08.20
    [Spring] Collection  (0) 2021.08.19
Designed by Tistory.