Spring之bean注入方式
?? 关于bean的注入方法,spring提供了三种方法:
?? 1.构造函数注入
?? 2.setter注入
?? 3.方法注入(省略)
?? 在一般情况下使用前两种方式。基于构造器的DI通过调用带参数的构造器来实现,每个参数代表一个依赖。此外还可以通过给stiatic工厂方法传参数来构造bean。
?? 对应的Class代码:
??public class LayerData ?
{
??private YYHYGenericData dataService;
??private List<Object> RecordList = new ArrayList<Object>();
??public List<Object> getRecordList()?
?{
return RecordList;
?}
??public LayerData(String LayerName,YYHYGenericData dbservice,String SQL )
??{
?this.dataService=dbservice;
?System.out.println("图层:"+LayerName+"开始加载缓存");
? ?RecordList= dataService.getAll( SQL);
?
??}
?
?
}
?
??对应的bean配置:
?
??<bean id="outcrop"
?class="com.yyhy.Webgis.WFSLayer.LayerData">
<constructor-arg index="0">
<value>outcrop</value>
</constructor-arg>
<constructor-arg index="1">
<ref bean="YYHYGenericData"/>
</constructor-arg>
<constructor-arg index="2">
<value>select id,name,objlevel,objtype,the_geom,fontangle,fontcolor,fonttransparence,objdataprecision,fontsize,centerpoint_51000 as centerpoint,enddate,begindate,fillsymbolstyle,filltransparence,wkt_51000 ?as WKT from outcrop where wkt_51000 is not null</value>
</constructor-arg>
</bean>
?
??这种方式是直接通过传入构造函数参数值的方式注入的,多个参数之间通过 index属性进行区别。
?
?? ? <bean id="YyhytablesnamedicDAOBean"
?class="com.yyhy.Baseclass.db.YYHYGenericManagerImpl">
<constructor-arg>
<bean class="com.yyhy.Baseclass.db.YYHYGenericDaoHibernate">
<constructor-arg value="com.yyhy.hx.tablesinformation.Yyhytablesnamedic"/>
<property name="sessionFactory"
?ref="sessionFactory"/>
?? ? </bean>
?? ? 这是一个嵌套配置构造函数的bean,类YYHYGenericManagerImpl的构造函数参数是bean对象,而这个bean对象所对应的class的构造函数则需要一个bean 的reference来注入。
?
?? ? setter注入方式:
?? ? <bean id="YyhytablesnamedicDAOBean"
?class="com.yyhy.Baseclass.db.YYHYGenericManagerImpl">
?? ? ? ? <property name="*DAO"?
?? ? ? ? ? ? ? ? ? ref="BeanDAO">
?? ?</bean> ?
?? ?其中的seeter注入可是value的值类型,也可以是上面的引用类型。
?
?? ?是构造函数注入还是setter注入?
?? ?由于大量的构造器函数可能使程序变得笨拙,特别是当某些属性是可选的时候,因此通常情况下,提倡使用setter注入。而且setter DI在以后的某个时候还可以重新实例配置。