2011년 7월 13일 수요일

Spring 3.x 메시지 및 이벤트 처리

MessageSource 이용한 메시지 국제화

MessageSource
인터페이스는 지역 언어에 따라 알맞은 메시지를 구할 있는 메서드를 정의하고 있다. ApplicationContext MessageSource 인터페이스를 상속받고 있어 지역 언어에 알맞는 메시지를 가져올수 있다.

<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>message.greeting</value>
<value>message.error</value>
</list>
</property>
</bean>

message.greeting
Package 포함한 Full Name이어야 한다.

객체에서 메시지 이용하기

1. ApplicationContext
사용하기

AbstractApplicationContext context = new ClassPathXmlApplicationContext(configLocations);
context.registerShutdownHook();

Locale locale = Locale.getDefault();
String greeting = context.getMessage("greeting", new Object[0], locale);
System.out.println("Default Locale Greeting: " + greeting);

Locale englishLocale = Locale.ENGLISH;
String englishGreeting = context.getMessage("greeting", new Object[0],englishLocale);
System.out.println("English Locale Greeting: " + englishGreeting);

2. MessageSourceAware Implements

public class LoginProcessor implements MessageSourceAware {
private MessageSource messageSource;

@Override
public void setMessageSource(MessageSource messageSource) {
this.messageSource = messageSource;
}

public void login(String username, String password) {
if (!username.equals("madvirus")) {
Object[] args = new String[] { username };
String failMessage = messageSource.getMessage("login.fail", args,
Locale.getDefault());
throw new IllegalArgumentException(failMessage);
}
}
}

Spring Context Event
ApplicationContext
Event 발생시킬 있는 publishEvent() 메서드를 제공하고 있다. ApplicationContext 통해서 이벤트를 발생 시키고 싶은 빈은 ApplicationContextAware 인터페이스를 구현한다.
ApplicationContex
발생시킨 이벤트를 처리할 클래스는 ApplicationListener 인터페이스를 알맞게 구현해 주면 된다.

public class LoginProcessor implements MessageSourceAware {
   private MessageSource messageSource;

@Override
   public void setMessageSource(MessageSource messageSource) {
                this.messageSource = messageSource;
   }

   public void login(String username, String password) {
                if (!username.equals("madvirus")) {
                             Object[] args = new String[] { username };
                             String failMessage = messageSource.getMessage("login.fail", args,
 Locale.getDefault());
                             throw new IllegalArgumentException(failMessage);
                }
   }
}

public class MemberRegistrationEvent extends ApplicationEvent {
   private Member member;

   public MemberRegistrationEvent(Object source, Member member) {
                super(source);
                this.member = member;
   }

   public Member getMember() {
                return member;
   }
}

public class CustomEventListener implements
ApplicationListener<MemberRegistrationEvent> {

   @Override
   public void onApplicationEvent(MemberRegistrationEvent event) {
                System.out.println("회원 가입 이벤트 발생: " + event.getMember());
   }
}

ApplicationListener
인터페이스를 구현한 클래스를 스피링 빈으로 등록해 주기만 하면 이벤트를 전달받아 처리할수 있다.

Spring
기본적으로 ApplicationContext 관련된 이벤트를 발생시키고 있다.
·         ContextRefreshedEvent: 초기화되거나 설정을 재로딩해서 초기화를 재수행할 발생
·         ContextCloseEvent: 종료될 발생
·         ContextStartEvent: 시작될 발생
·         ContextStoppedEvent: 중지될 발생

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...