스프링을 사용해 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; } }