spring mvc中针对xml的classtobebound的改善类

在spring mvc中,如果要输出xml,则其中一个方法是


<beans>
<bean id="jaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list>
<value>org.springframework.oxm.jaxb.Flight</value>
<value>org.springframework.oxm.jaxb.Flights</value>
</list>
</property


如果类太多,要逐个增加到classTobBeBound外,十分麻烦,因此可以这样做:



public class ClasspathScanningJaxb2Marshaller extends Jaxb2Marshaller {
private static final Logger log = LoggerFactory
.getLogger(ClasspathScanningJaxb2Marshaller.class);

private List<String> basePackages;

public List<String> getBasePackages() {
return basePackages;
}

public void setBasePackages(List<String> basePackages) {
this.basePackages = basePackages;
}

@PostConstruct
public void init() throws Exception {
setClassesToBeBound(getXmlRootElementClasses());
}

private Class<?>[] getXmlRootElementClasses() throws Exception {
ClassPathScanningCandidateComponentProvider scanner =
new ClassPathScanningCandidateComponentProvider(false);
scanner.addIncludeFilter(new AnnotationTypeFilter(XmlRootElement.class));

List<Class<?>> classes = new ArrayList<Class<?>>();
for (String basePackage : basePackages) {
Set<BeanDefinition> definitions = scanner.findCandidateComponents(basePackage);
for (BeanDefinition definition : definitions) {
String className = definition.getBeanClassName();
log.info("Found class: {}", className);
classes.add(Class.forName(className));
}
}

return classes.toArray(new Class[0]);
}

}



使用方法,在配置文件中,比如spring-mvc.xml中

<!-- XML视图 -->
<bean id="marshallingView"
class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="com.itownet.isms.core.mapper.ClasspathScanningJaxb2Marshaller">
<property name="basePackages">
<list>
<value>com.abc.model</value>
</list>
</property>
</bean>
</constructor-arg>
</bean>

则在对应的xml解析器中,注入刚才的类,其中配置需要解析的xml的实体类所在的包,
这里用basePackage指定
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值