如何在我的Spring配置文件中再添加一个dtd?

时间:2012-08-22 16:58:44

标签: spring aspectj xml-dtd

我在我的applicationContext.xml中使用了.dtd,但现在我想使用基于注释的Spring的AOP。我被告知要在我的applicationContext.xml中添加一个。

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <aop:aspectj-autoproxy />
...

但是发生了一些错误。看来该文件无法识别aop节点,所以我想我应该再导入一个.dtd文件,我发现这个:

<!DOCTYPE aspectj PUBLIC
        "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">

但是我可以同时使用.dtd togeter吗?如何?

THX

2 个答案:

答案 0 :(得分:2)

您不必在此使用DOCTYPE,更好地声明xml名称空间如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">

<beans>
    <aop:aspectj-autoproxy />
...

xmlns="http://www.springframework.org/schema/beans"表示beans将是根命名空间(您不必使用<beans:bean>),aop可以根据需要访问。

答案 1 :(得分:0)

您引用的两个DTD的构造方式不允许它们一起使用。特别是http://www.springframework.org/dtd/spring-beans.dtdbeans的定义只是

<!ELEMENT beans (
              description?,
              (import | alias | bean)*
)>

它不提供名为aop:aspectj-autoproxy的子级,并且它不为像您这样的后来用户提供任何机制,以便向beans的内容添加新内容。

可以构建DTD以实现可扩展性,并支持多个名称空间中元素的集成,但需要一些预先考虑和规划。当不包括扩展点时,通常很难或不可能扩展DTD而不只是重写它。