Java/Spring/FactoryBean

Материал из Java эксперт
Перейти к: навигация, поиск

Compare Beans From FactoryBean

       
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";
  }
}





Spring FactoryBean Demo

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";
  }
}