0

我在 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 吗?如何?

谢谢

4

2 回答 2

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可以根据需要访问。

于 2012-08-22T17:33:24.307 回答
0

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

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

它不提供名为 的子aop:aspectj-autoproxy级,也不提供任何机制让像您这样的后续用户向beans.

可以构建 DTD 以实现可扩展性并支持来自多个名称空间的元素的集成,尽管它需要一些预先考虑和规划。当不包括扩展点时,通常很难或不可能在不重写 DTD 的情况下对其进行扩展。

于 2012-08-23T21:39:11.267 回答