bean的自动装配解释
手动解决方式
自动注入解决方式
bean的自动装配解释
之前有构造注入和设值注入,但是也是手动的
autowire =”byname”
这里要注意自动装配的话,不能装配特殊类型,比如日期类型(要用自定义属性编辑器)
手动解决方式
我们知道的普通是这样解决的:
<bean id="myBean" class="com.bean.myBean"> <property name="date" ref="date"/> </bean> <bean id="date" class="java.util.Date"> </bean>
自动注入解决方式
但是要自动注入要用自定义属性编辑器
原理:类似于拦截器,当遇到map中需要过滤的类型时,就按照所配置的属性编辑器处理注入的值,这个值的类型是String类型的,由属性编辑器来决定转换类型。
<!--自定义属性编辑 --> <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer"> <!--配置一个自定义编辑器--> <property name="customEditors"> <map> <entry key="java.util.Date"> <bean class="com.bean.DateTest"> <property name="date" value="yyyy-mm-dd" /> <!--注入需要转换的格式,注入到DateTest 中--> </bean> </entry> </map> </property> </bean> <bean id="md" class="com.bean.myBean"> <property name="date"> <value>2011-1-1</value> </property> </bean>
package com.bean; import java.beans.PropertyEditorSupport; import java.text.ParseException; import java.text.SimpleDateFormat; public class DateTest extends PropertyEditorSupport{ private String date;//表示格式,是自动注入的 public String getDate() { return date; } public void setDate(String date) { this.date = date; } @Override public void setAsText(String text) throws IllegalArgumentException { System.out.println("text:"+text); SimpleDateFormat sdf = new SimpleDateFormat(date); Date date = null; try { date = sdf.parse(text);//传的是字符串,解析为Date数据 this.setValue(date); } catch (ParseException e) { e.printStackTrace(); } } }