더북(TheBook)

스프링을 사용해 MessageDigest 객체 생성을 관리하려고 할 때 FactoryBean을 사용하지 않는 가장 좋은 방법은 빈에 algorithmName이라는 프로퍼티를 주입하고 초기화 콜백에서 주입된 algorithmName 프로퍼티를 사용해 MessageDigest.getInstance()를 호출하는 방식입니다. 하지만 FactoryBean을 사용한다면 이 로직을 빈 내부에 캡슐화할 수 있습니다. 이렇게 하면 MessageDigest 인스턴스가 필요한 빈에서는 messageDigest 프로퍼티를 정의한 뒤 FactoryBean을 사용해 원하는 인스턴스를 얻을 수 있습니다. 다음은 원하는 MessageDigest를 반환하도록 FactoryBean을 구현한 코드입니다.

예제 4-24 MessageDigest를 반환하는 FactoryBean([[factory-bean]] MessageDigestFactoryBean.java)

package com.apress.prospring5.ch4;

import java.security.MessageDigest;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;

public class MessageDigestFactoryBean implements 
        FactoryBean<MessageDigest>, InitializingBean {
    private String algorithmName = "MD5";

    private MessageDigest messageDigest = null;

    public MessageDigest getObject() throws Exception {
        return messageDigest;
    }

    public Class<MessageDigest> getObjectType() {
        return MessageDigest.class;
    }

    public boolean isSingleton() {
        return true;
    }

    public void afterPropertiesSet() throws Exception {
        messageDigest = MessageDigest.getInstance(algorithmName);
    }

    public void setAlgorithmName(String algorithmName) {
        this.algorithmName = algorithmName;
    }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.