关于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在以后的某个时候还可以重新实例配置。