如何让xdoclet 的spring 标签支持java.util.Map类型属性的注入
2012-05-14 00:00
651 查看
如何让xdoclet 的spring 标签支持java.util.Map类型属性的注入
(如需转载,请注明引用)
用过Xdoclet 工具的Spring 标签的人应该都知道:XDoclet支持的Spring方法注入包括:ref,list,name和value, 它是不支持java.util.Map类型注入的。 而Spring 是支持Map的注入的方法如下:
为了实现以上这个配置效果, 现只需要按如下步骤进行配置即可。
(1)现在只需要在.java源文件中的@spring.property 标签添加一个map属性
注意: map 属性的值的写法,多个键值之间用分号分隔,键与值之间用冒号分隔
(2) 另外,Xdoclet 指定的生成模板文件spring_xml.xdt 也得做如下修改:
只需要在property 元素之内添加
说明: 这里通过xdoclet 对velocity 模板语言的支持,并且在语言脚本运行时可以取得当前标签的所有属性值的特点,对输出的spring 配置中的map 标签进行编程
(3) 为了要支持Velocity脚本语言,我这里引用 最新版本的veloctity1.7,则对应的相关引用jar 也得对应,我进行xdoclet 生成过程引用到的jar 如图
根据以上的配置之后,你应该就可以得到支持map注入的spring 配置文件了。
以下是对应的spring_xml.xdt 文件:
(如需转载,请注明引用)
用过Xdoclet 工具的Spring 标签的人应该都知道:XDoclet支持的Spring方法注入包括:ref,list,name和value, 它是不支持java.util.Map类型注入的。 而Spring 是支持Map的注入的方法如下:
<bean id="ITest" class="com.tt.xx.oo.common.test.impl.Testor" > <property name="testMap"> <map> <entry key="test1" value="1"/> <entry key="test2" value="xm03"/> </map> </property> </bean>
为了实现以上这个配置效果, 现只需要按如下步骤进行配置即可。
(1)现在只需要在.java源文件中的@spring.property 标签添加一个map属性
/** * @spring.bean * name="Test" * * @spring.property * name="test-list-ref" * map="{student:1,teacher:2}" */ public class Test { private Map<String, String> myMap; /** * @param myMap the myMap to set */ public void setMyMap(Map<String, String> myMap) { this.myMap = myMap; } }
注意: map 属性的值的写法,多个键值之间用分号分隔,键与值之间用冒号分隔
(2) 另外,Xdoclet 指定的生成模板文件spring_xml.xdt 也得做如下修改:
只需要在property 元素之内添加
<XDtTagDef:tagDef namespace="TemplateEngines" handler="xdoclet.modules.apache.velocity.VelocityEngineTagHandler"/> <XDtClass:ifHasClassTag tagName="spring.property" paramName="map"> <XDtTemplateEngines:generator> #set($input=${currentClassTag.getAttributeValue('map')}) #set($input1=${input.replaceAll("\{", "").replaceAll("}", "")}) #set($groups=${input1.split(',')}) #if(${groups.isEmpty()}) #else <map> #foreach( $group in ${input1.split(',')}) #set($kv=${group.split(':')}) #set($k=${kv[0].trim()}) #set($v=${kv[1].trim()}) #if(${v.startsWith("&")}) <entry key="$k" value-ref="${v.substring(1)}"/> #else <entry key="$k" value="$v"/> #end #end </map> #end</XDtTemplateEngines:generator> </XDtClass:ifHasClassTag>
说明: 这里通过xdoclet 对velocity 模板语言的支持,并且在语言脚本运行时可以取得当前标签的所有属性值的特点,对输出的spring 配置中的map 标签进行编程
(3) 为了要支持Velocity脚本语言,我这里引用 最新版本的veloctity1.7,则对应的相关引用jar 也得对应,我进行xdoclet 生成过程引用到的jar 如图
根据以上的配置之后,你应该就可以得到支持map注入的spring 配置文件了。
以下是对应的spring_xml.xdt 文件:
<?xml version="1.0" encoding="<XDtConfig:configParameterValue paramName='Xmlencoding'/>"?> <!DOCTYPE beans PUBLIC "<XDtXml:publicId/>" "<XDtXml:systemId/>"> <beans default-autowire="<XDtConfig:configParameterValue paramName="defaultAutowire"/>" default-lazy-init="<XDtConfig:configParameterValue paramName="defaultLazyInit"/>" default-dependency-check="<XDtConfig:configParameterValue paramName="defaultDependencyCheck"/>" > <XDtClass:forAllClasses> <XDtClass:forAllClassTags tagName="spring:bean" superclasses="false"> <bean <XDtClass:ifHasClassTag tagName="spring.bean" paramName="id"> id="<XDtClass:classTagValue tagName="spring.bean" paramName="id"/>" </XDtClass:ifHasClassTag> <XDtClass:ifHasClassTag tagName="spring.bean" paramName="name"> name="<XDtClass:classTagValue tagName="spring.bean" paramName="name"/>" </XDtClass:ifHasClassTag> class="<XDtClass:fullClassName/>" <XDtClass:ifHasClassTag tagName="spring.bean" paramName="abstract"> abstract="<XDtClass:classTagValue tagName="spring.bean" paramName="abstract"/>" </XDtClass:ifHasClassTag> <XDtClass:ifHasClassTag tagName="spring.bean" paramName="parent"> parent="<XDtClass:classTagValue tagName="spring.bean" paramName="parent"/>" </XDtClass:ifHasClassTag> <XDtClass:ifHasClassTag tagName="spring.bean" paramName="autowire"> autowire="<XDtClass:classTagValue tagName="spring:bean" paramName="autowire" values="no,byName,byType,constructor,auto-detect"/>" </XDtClass:ifHasClassTag> <XDtClass:ifHasClassTag tagName="spring.bean" paramName="init-method"> init-method="<XDtClass:classTagValue tagName="spring.bean" paramName="init-method"/>" </XDtClass:ifHasClassTag> <XDtClass:ifHasClassTag tagName="spring.bean" paramName="destroy-method"> destroy-method="<XDtClass:classTagValue tagName="spring:bean" paramName="destroy-method"/>" </XDtClass:ifHasClassTag> <XDtClass:ifHasClassTag tagName="spring.bean" paramName="dependency-check"> dependency-check="<XDtClass:classTagValue tagName="spring:bean" paramName="dependency-check" values="all,objects,simple"/>" </XDtClass:ifHasClassTag> <XDtClass:ifHasClassTag tagName="spring.bean" paramName="singleton"> singleton="<XDtClass:classTagValue tagName="spring:bean" paramName="singleton" values="true,false" default="true"/>" </XDtClass:ifHasClassTag> <XDtClass:ifHasClassTag tagName="spring.bean" paramName="lazy-init"> lazy-init="<XDtClass:classTagValue tagName="spring:bean" paramName="lazy-init" values="true,false,default" default="default"/>" </XDtClass:ifHasClassTag> > <XDtClass:ifHasClassTag tagName="spring.bean" paramName="description"> <description><XDtClass:classTagValue tagName="spring.bean" paramName="description"/></description> </XDtClass:ifHasClassTag> <XDtConstructor:forAllConstructors> <XDtConstructor:forAllConstructorTags tagName="spring.constructor-arg"> <constructor-arg> <XDtConstructor:ifHasConstructorTag tagName="spring.constructor-arg" paramName="value"> <value><XDtConstructor:constructorTagValue tagName="spring.constructor-arg" paramName="value"/></value> </XDtConstructor:ifHasConstructorTag> <XDtConstructor:ifHasConstructorTag tagName="spring.constructor-arg" paramName="ref"> <ref bean="<XDtConstructor:constructorTagValue tagName="spring.constructor-arg" paramName="ref"/>"/> </XDtConstructor:ifHasConstructorTag> <XDtConstructor:ifHasConstructorTag tagName="spring.constructor-arg" paramName="list-value"> <list> <XDtConstructor:forAllConstructorTagTokens tagName="spring.constructor-arg" paramName="list-value"> <value><XDtConstructor:currentToken/></value> </XDtConstructor:forAllConstructorTagTokens> </list> </XDtConstructor:ifHasConstructorTag> <XDtConstructor:ifHasConstructorTag tagName="spring.constructor-arg" paramName="list-ref"> <list> <XDtConstructor:forAllConstructorTagTokens tagName="spring.constructor-arg" paramName="list-ref"> <ref bean="<XDtClass:currentToken/>"/> </XDtConstructor:forAllConstructorTagTokens> </list> </XDtConstructor:ifHasConstructorTag> </constructor-arg> </XDtConstructor:forAllConstructorTags> </XDtConstructor:forAllConstructors> <XDtMethod:forAllMethods superclasses="true"> <XDtMethod:ifHasMethodTag tagName="spring.property"> <property name="<XDtMethod:propertyName/>"> <XDtMethod:ifHasMethodTag tagName="spring.property" paramName="value"> <value><XDtMethod:methodTagValue tagName="spring.property" paramName="value"/></value> </XDtMethod:ifHasMethodTag> <XDtMethod:ifHasMethodTag tagName="spring.property" paramName="ref"> <ref bean="<XDtMethod:methodTagValue tagName="spring.property" paramName="ref"/>"/> </XDtMethod:ifHasMethodTag> <XDtMethod:ifHasMethodTag tagName="spring.property" paramName="list-value"> <list> <XDtMethod:forAllMethodTagTokens tagName="spring.property" paramName="list-value"> <value><XDtMethod:currentToken/></value> </XDtMethod:forAllMethodTagTokens> </list> </XDtMethod:ifHasMethodTag> <XDtMethod:ifHasMethodTag tagName="spring.property" paramName="list-ref"> <list> <XDtMethod:forAllMethodTagTokens tagName="spring.property" paramName="list-ref"> <ref bean="<XDtClass:currentToken/>"/> </XDtMethod:forAllMethodTagTokens> </list> </XDtMethod:ifHasMethodTag> </property> </XDtMethod:ifHasMethodTag> </XDtMethod:forAllMethods> <XDtClass:forAllClassTags tagName="spring.property"> <property name="<XDtClass:classTagValue tagName="spring.property" paramName="name"/>"> <XDtClass:ifHasClassTag tagName="spring.property" paramName="value"> <value><XDtClass:classTagValue tagName="spring.property" paramName="value"/></value> </XDtClass:ifHasClassTag> <XDtClass:ifHasClassTag tagName="spring.property" paramName="ref"> <ref bean="<XDtClass:classTagValue tagName="spring.property" paramName="ref"/>"/> </XDtClass:ifHasClassTag> <XDtClass:ifHasClassTag tagName="spring.property" paramName="list-value"> <list> <XDtClass:forAllClassTagTokens tagName="spring.property" paramName="list-value"> <value><XDtClass:currentToken/></value> </XDtClass:forAllClassTagTokens> </list> </XDtClass:ifHasClassTag> <XDtClass:ifHasClassTag tagName="spring.property" paramName="list-ref"> <list> <XDtClass:forAllClassTagTokens tagName="spring.property" paramName="list-ref"> <ref bean="<XDtClass:currentToken/>"/> </XDtClass:forAllClassTagTokens> </list> </XDtClass:ifHasClassTag> </property> </XDtClass:forAllClassTags> </bean> </XDtClass:forAllClassTags> </XDtClass:forAllClasses> <XDtMerge:merge file="spring-beans.xml"> <!-- To include additional bean definitions for Spring in the generated application context file, add a file to your XDoclet merge directory called spring-beans.xml that contains the <bean></bean> markup. --> </XDtMerge:merge> </beans>
相关文章推荐
- Java框架spring 学习笔记(八):注入对象类型属性
- Spring系列【09】使用<prop>标签为Java持久属性集注入值
- [原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间
- spring 3配置文件中如何注入map list set等类型
- spring 3配置文件中如何注入map list set等类型
- spring如何注入Date类型的属性
- spring 配置文件中如何注入map list set等类型
- spring 注入java.util.Properties 属性两种xml中的配置练习
- spring:使用<prop>标签为Java持久属性集注入值
- spring如何注入Date类型的属性
- Spring中使用Map、Set、List、数组、属性集合的注入方法配置文件
- Java Web实战04--Spring之属性注入和构造器注入
- spring笔记4---如何向一个bean注入List和Map
- Spring (三)注入依赖对象、注入集合类型的属性
- 02_Spring3.2_属性类型设值注入
- 解决Apache CXF 不支持传递java.sql.Timestamp和java.util.HashMap类型问题
- Spring+Servlet整合(如何向Servlet注入属性)
- Spring中如何向Bean注入系统属性或环境变量
- Spring+Servlet整合(如何向Servlet注入属性(转),servlet获取spring容器中的bean)
- 在spring 中如何注入map,set,list,property等参数