Java/Spring/FactoryBean
Compare Beans From FactoryBean
<source lang="java">
File: context.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="sha" class="MessageDigestFactoryBean"> <property name="algorithm" value="SHA1"/> </bean> <bean id="md5" class="MessageDigestFactoryBean"/>
</beans>
File: Main.java import java.security.MessageDigest; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; public class Main {
public static void main(String[] args) throws Exception { XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("context.xml")); MessageDigestFactoryBean factoryBean = (MessageDigestFactoryBean) factory.getBean("&sha"); String d1 = (String) factory.getBean("sha"); String d2 = (String) factoryBean.getObject(); System.out.println("Equal created? " + (d1.equals(d2))); }
} class MessageDigestFactoryBean implements FactoryBean, InitializingBean {
private static final String DEFAULT_ALGORITHM = "MD5"; private String algorithm = DEFAULT_ALGORITHM; public Object getObject() throws Exception { return this.algorithm; } public Class getObjectType() { return MessageDigest.class; } public boolean isSingleton() { return true; } public void setAlgorithm(String algorithm) { this.algorithm = algorithm; } public void afterPropertiesSet() throws Exception { this.algorithm += " after setting"; }
}
</source>
Spring FactoryBean Demo
<source lang="java">
File: context.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="sha" class="MessageDigestFactoryBean"> <property name="algorithm" value="SHA1"/> </bean> <bean id="md5" class="MessageDigestFactoryBean"/>
</beans>
File: Main.java import java.security.MessageDigest; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; public class Main {
public static void main(String[] args) { XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("context.xml")); String d1 = (String) factory.getBean("sha"); String d2 = (String) factory.getBean("md5"); System.out.println(d1); System.out.println(d2); }
} class MessageDigestFactoryBean implements FactoryBean, InitializingBean {
private static final String DEFAULT_ALGORITHM = "MD5"; private String algorithm = DEFAULT_ALGORITHM; public Object getObject() throws Exception { return this.algorithm; } public Class getObjectType() { return MessageDigest.class; } public boolean isSingleton() { return true; } public void setAlgorithm(String algorithm) { this.algorithm = algorithm; } public void afterPropertiesSet() throws Exception { this.algorithm += " after setting"; }
}
</source>