[Spring] xml 시작전, 시작후 동작하는 메소드

     

    xml을 불러올 때와 끝났을 때만 불러오는 코드가 있을까?

    그 방법에 대해서 xml 방식의 일부를 설명이다.

     

    package com.day02.Ex04;
    
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    import org.springframework.context.support.GenericXmlApplicationContext;
    
    public class MainClass {
    
    	public static void main(String [] args)
    	{
    		GenericXmlApplicationContext ctx
    		= new GenericXmlApplicationContext();
    		
    		ctx.load("classpath:StudentEx04.xml");
    		ctx.refresh();
    		
    		ctx.close();
    		
    		
    	}
    }

    메인에서 ctx를 실행하고 끝난다면 아래와 같은 실행 문구가 나온다.

     

    위의 메인 코드를 본다면 아무것도 존재하지 않는다.

    그러나 콘솔창에는 이와 같이 문구가 써져 있는 것을 확인 할 수가 있다.

    이는 실행도중이 아닌, 실행하기 전과 끝났을 때의 순간에만 실행되는 메소드가 존재해서 이다.

     

     

    package com.day02.Ex04;
    
    import java.util.*;
    
    import org.springframework.beans.factory.DisposableBean;
    import org.springframework.beans.factory.InitializingBean;
    
    public class Student implements InitializingBean, DisposableBean{
    
    	private String name;
    	private int age;
    	
    	
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    	
    	//빈 소멸과정에서 호출 => ctx.close() 호출
    	@Override
    	public void destroy() throws Exception {
    		// TODO Auto-generated method stub
    		System.out.println("destroy()");
    	}
    
    	//빈 초기화 과정에서 호출 => ctx.refresh() 호출
    	@Override
    	public void afterPropertiesSet() throws Exception {
    		// TODO Auto-generated method stub
    		System.out.println("afterPropertiesSet()");
    	}
    }
    

    첫 번째 방식이다.

    오버라이드를 사용할 경우에는 implements InitializingBean, DisposableBean 사용한다.

    그러면 상속 된 부모클레스가 갖고 있는 afterPropertiesSet 메소드와 destroy 메소드를 사용해야 한다.

     

     

     

    그렇다면 오버라이드를 사용 하고 싶지 않을 때에는 어떻게 해야 할까?

    package com.day02.Ex04;
    
    import javax.annotation.PostConstruct;
    import javax.annotation.PreDestroy;
    
    public class OtherStudent {
    
    	private String name;
    	private int age;
    	
    	public OtherStudent(String name, int age) {
    		this.name = name;
    		this.age = age;
    	}
    	
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	
    	@PostConstruct //빈 초기화 과정에서 호출 => ctx.refresh() 호출
    	public void initMethod() {
    		System.out.println("initMethod()");
    	}
    	
    	@PreDestroy //빈 소멸과정에서 호출 => ctx.close() 호출
    	public void destroyMethod() {
    		System.out.println("destroyMethod");
    	}
    }
    

     

    두 번째 방식이다.

    오버라이드 대신에 어노테이션을 이용하면 된다.

    어노테이션에 @PostConstruct와 @PreDestroy가 있다.

    어노테이션이 이를 받아 들여 시작과 끝에 작동이 된다.

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
    
    	<context:annotation-config />
    
    	<bean id="student" class="com.day02.Ex04.Student">
    		<property name="name" value="홍길동" />
    		<property name="age" value="20" />
    	</bean>
    	
    	<bean id="otherStudent" class="com.day02.Ex04.OtherStudent">
    		<constructor-arg value="홍길자" />
    		<constructor-arg value="50" />
    	</bean>
    
    
    </beans>

    대신에 어노테이션을 사용했으므로 중간에 <context:annotation-config /> 를 사용했다는 것을 알려야 한다.

     

     

    실행은 bean 실행 했을 때 해당 class 내의 실행을 해야 구분이 가능하다.

    반응형

    'Web > Spring' 카테고리의 다른 글

    [Spring] xml 가져오기2(줄임 방식)  (0) 2020.10.22
    [Spring] 외부의 xml 자료를 가져오기  (0) 2020.10.22
    [Spring] Xml Java vs XML  (0) 2020.10.21
    [Spring] xml 활용하기  (0) 2020.10.21
    [Spring] xml사용하기1  (0) 2020.10.20

    댓글

    Designed by JB FACTORY