프로그래머의 삶 Programmer's Life/SpringFramework

Bean 이름과 자신의 컨테이너 인식을 위해~(스케쥴링의 용도)

Oliver's World 2008. 11. 1. 15:45
728x90

1 .스프링 컨테이너는 BeanNameAware인터페이스를 통해 그 빈의 이름을 알려줄수 있다.

package org.psringframework.scheduling.quartz;

public class CronTriggerBean extends CronTrigger implements

...,..,BeanNameAware,...{  

    private String beanName;

    public void setBeanName(String beanName){

        this.beanName=beanName;

    }

...

    public void afterPropertiesSet()...{

           if(getName() == null ){

               setBeanName(this.beanName);

            }
 ...

    }

}


 - 빈이 로딩되면 컨테이너는 빈이 BeanNameAware 를 구현하는지를 확인하고, 빈묶기 XML 파일에서 <bean>요소의 id나 name 속성에 의해 정의된 빈의 일므을 전달하여 setBeanName()을 호출한다.

  여기서 CronTriggerBean은 CronTrigger를 확장한다. 스프링 컨텍스트가 빈의 모든 특성을 설정한 다음 CronTrigger에 정의되어 있는 setBeanName()으로 빈의 이름이 전달되어 스케쥴 작업의 이름을 설정하게된다.

 2. 스프링의 ApplicationContextAware 와 BeanFactoryAware 인터페이스에는 빈으로 하여금 자신의 컨테이너를 인식할 수 있도록 setApplicationContext() 메소드와 setBeanFactory()메소드가 선언되어 있다. 스프링 컨테이너는 빈이 어떤 인터페이스를 구현하는지를 판단하여 BeanFactory나 ApplicationContext를 제공할 것이다.

하지만 이로써 빈은 애플리케이션 컨텍스트에 접근함으로써 강력함으로 얻게되나 다른한편으로는 빈과 스프링과의 결합이 발생하게되어 비권장이다..ㅡㅡ;


public class StudentServiceImpl implements StudentService,ApplicationContextAware{  

   private ApplicationContext context;
.....

   public void setApplicationContext(ApplicationContext contex

t) {

    this.context=context;

  }

.........

...

}

728x90