我在我的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
答案 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.dtd中beans
的定义只是
<!ELEMENT beans (
description?,
(import | alias | bean)*
)>
它不提供名为aop:aspectj-autoproxy
的子级,并且它不为像您这样的后来用户提供任何机制,以便向beans
的内容添加新内容。
可以构建DTD以实现可扩展性,并支持多个名称空间中元素的集成,但需要一些预先考虑和规划。当不包括扩展点时,通常很难或不可能扩展DTD而不只是重写它。