2010年08月11日

Aware

どうも、塩内藤です。

引き続きspring系で

bean定義のxmlで定義しているメッセージソースをMessageUtilみたいなの作って業務ロジック内でも使いたかった。

で、ちょっと考えてAutowiredとか使えばいいのかなぁと思ってたんですが、Awareなるものがあるそうな

ちゅうことで、実装。

1.MessageUtilにMessageSourceAwareをimplements
2.@Componentを指定してコンポーネントスキャンの対象する
3.受け取ったMessageSourceをstaticで保持

これで、いいみたいです。

下のbean定義のxmlで定義しているメッセージソースをinjectionしてくれます。

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="/WEB-INF/messages/messages" />
<property name="cacheSeconds" value="0" />
</bean>



package org.sample;

import org.springframework.context.MessageSource;
import org.springframework.context.MessageSourceAware;
import org.springframework.stereotype.Component;

@Component
public class MessageUtil implements MessageSourceAware {

private static MessageSource messageSource = null;

/** {@inheritDoc} */
@Override
public void setMessageSource(MessageSource messageSource) {

MessageUtil.messageSource = messageSource;

}


public static String getMessage(String messageCode, Object... args) {

return messageSource.getMessage(messageCode, args, null);

}

}


ついでにBeanFactory用のやつも作成。

こんな感じになりました。

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

@Component
public class BeanFactoryUtils implements ApplicationContextAware {

/** ApplicationContext */
private static ApplicationContext applicationContext = null;

/** {@inheritDoc} */
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

BeanFactoryUtils.applicationContext = applicationContext;

}

@SuppressWarnings("unchecked")
public static <T> T getBean(String beanId) {

return (T) applicationContext.getBean(beanId);

}

public static <T> T getBean(Class<T> clazz) {

return applicationContext.getBean(clazz);

}

}


よくよく調べるとAware系のインターフェイスが存在してて、その手間を省くためにAutowiredが出てきたぽい?

Autowiredだと複数の実装クラスが存在してると@Qualifier使ってbeanIdガチ指定しないといけない気がするけど、どうなんだろう、、、
posted by しお at 13:03| Comment(0) | TrackBack(0) | spring