簡體   English   中英

Spring 4.3.4中的AOP依賴問題

[英]AOP Dependency Issue in Spring 4.3.4

我目前正在使用Spring 4.3.4執行“簡單方面示例程序”。 我嘗試同時使用XML和注釋,但是它給了我BeanCreationException錯誤。

創建名稱為'org.springframework.aop.config.internalAutoProxyCreator'的bean時出錯

我添加了以下提到的依賴項:

  • 彈簧芯4.3.4
  • 春豆4.3.4
  • 春天背景4.3.4
  • 春天方面4.3.4

主要:

public class Main {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("com/sonyx64/spring/aop/config/Beans.xml");
        Camera camera = (Camera) context.getBean("camera");
        camera.snap();
        context.close();
    }}

相機類別:

public class Camera {
    public void snap() {
        System.out.println("SNAP!");
    }
}

記錄器類別:

public class Logger {
    public void aboutToTakePhoto() {
        System.out.println("About To Take Photo");
    }
}

Beans.xml

<bean id="camera" class="com.sonyx64.spring.aop.Camera"></bean>
    <bean id="logger" class="com.sonyx64.spring.aop.Logger"></bean>
    <aop:config>
        <aop:pointcut expression="execution(void com.sonyx64.spring.aop.Camera.snap())"
            id="camerasnap" />
        <aop:aspect id="loggeraspect" ref="logger">
            <aop:before method="aboutToTakePhoto" pointcut-ref="camerasnap" />
        </aop:aspect>
    </aop:config>

請為我建議一個適當的解決方案來處理此異常。

AspectJ weaver版本不是造成問題的原因。 我剛剛嘗試過,使用您的代碼和POM。 無論我使用的是weaver 1.8.8還是1.8.9,還是從POM中完全刪除了依賴項,它在所有情況下都能正常工作。 不幸的是,您自己的答案是錯誤的。

將項目上傳到Google雲端硬盤后,我可以很容易地看到問題的根本原因:您有Maven問題 您不使用標准的Maven目錄布局來使Maven在目錄src / main / resources中找到諸如bean.xml之類的 資源 只需檢查目標/類和由Maven創建的JAR:那里沒有bean.xml 因此,請修改您的目錄布局,使其看起來像這樣:

Maven目錄布局

這就是我所做的,還從POM中刪除了<sourceDirectory>指令。 或者,您可以通過配置Maven資源插件來設置自定義資源目錄。


PS:下次,請發布完整的堆棧跟蹤信息,而不僅僅是錯誤消息的一部分。 或者至少閱讀您自己的錯誤消息。 ;-)您已經很清楚了(我故意添加了一些換行符):

INFORMATION: Loading XML bean definitions from class path resource [com/pop/spring/aop/Beans.xml]
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException:
    IOException parsing XML document from class path resource [com/pop/spring/aop/Beans.xml];
    nested exception is
        java.io.FileNotFoundException:
            class path resource [com/pop/spring/aop/Beans.xml]
            cannot be opened because it does not exist

我嘗試了相同的示例,首先創建了maven項目,其次是針對Aspect Weavers依賴項,我添加了AspectJweaver 1.8.8版本的排除項,並包括AspectJweaver 1.8.9版本,它可以正常工作。

問題出在特定版本的Maven存儲庫jar“ aspectjweaver-1.8.9.jar”。 使用早期版本1.8.8可以解決此問題。

POM.xml:

<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <properties>
    <maven.target.source>1.8</maven.target.source>
    <maven.target.compiler>1.8</maven.target.compiler>
  </properties>
  <dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.8.8</version>
    </dependency>
  </dependencies>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM