Java/Spring/ConfigurableListableBeanFactory
CustomEditorConfigurer and ConfigurableListableBeanFactory
<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="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer"> <property name="customEditors"> <map> <entry key="java.lang.Double"> <bean class="ComplexPropertyEditor"/> </entry> </map> </property> </bean> <bean id="exampleBean" class="CustomEditorDemo"> <property name="values"> <list> <value>10</value> <value>-10</value> <value>10</value> </list> </property> </bean>
</beans>
File: Main.java import java.beans.PropertyEditorSupport; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.config.CustomEditorConfigurer; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; public class Main {
public static void main(String[] args) throws Exception { ConfigurableListableBeanFactory factory = new XmlBeanFactory(new ClassPathResource( "context.xml")); CustomEditorConfigurer configurer = (CustomEditorConfigurer) factory .getBean("customEditorConfigurer"); configurer.postProcessBeanFactory(factory); CustomEditorDemo bean = (CustomEditorDemo) factory.getBean("exampleBean"); System.out.println(bean.sum()); }
} class ComplexPropertyEditor extends PropertyEditorSupport {
public void setAsText(String s) throws IllegalArgumentException { Double re = Double.parseDouble(s); }
} class CustomEditorDemo {
private double[] values; private double result; public double sum() { for (double value : this.values) { result = result + value; } return result; } public void setValues(double[] values) { this.values = values; }
}
</source>
Use ConfigurableListableBeanFactory
<source lang="java">
File: context.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="numberClass" class="CustomInitializationMethodNumberClass" init-method="initialize"/>
</beans>
File: Main.java import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; public class Main {
public static void main(String[] args) throws Exception { ConfigurableListableBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource( "context.xml")); CustomInitializationMethodNumberClass bean = (CustomInitializationMethodNumberClass)beanFactory.getBean("numberClass"); System.out.println(bean.getNumbers()); }
} class CustomInitializationMethodNumberClass {
private List<String> numbers = new ArrayList<String>(); public List<String> getNumbers() { return this.numbers; } public void initialize() throws Exception { if (this.numbers.size() < 3) { numbers.add("one"); numbers.add("two"); numbers.add("three"); } }
}
</source>