Spring 4.3.4中的AOP依赖问题

时间:2016-12-31 10:47:21

标签: spring aop spring-aop

我目前正在使用Spring 4.3.4来执行“简单方面示例程序”。我尝试使用XML和Annotation,但它给了我BeanCreationException错误。

  

使用名称创建bean时出错   'org.springframework.aop.config.internalAutoProxyCreator'

我添加了下面提到的依赖项:

  • spring-core 4.3.4
  • spring-beans 4.3.4
  • spring-context 4.3.4
  • spring-aspects 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>

请建议我处理此例外的适当解决方案。

3 个答案:

答案 0 :(得分:2)

AspectJ weaver版本不是您的问题的原因。我刚试过,使用你的代码和你的POM。无论我使用weaver 1.8.8还是1.8.9,或者如果我完全删除了POM的依赖关系,它在所有情况下都能很好地工作。不幸的是,你自己的回答是错误的。

将项目上传到Google云端硬盘后,我可以很容易地看到问题的根本原因:您有 Maven问题。您不使用标准的Maven目录布局,以使Maven在目录 src / main / resources 中找到诸如 beans.xml 之类的资源。只需检查 target / classes 和Maven创建的JAR:其中没有 beans.xml 。所以请修改您的目录布局,看起来像这样:

Maven directory layout

这就是我所做的,也是从POM中删除<sourceDirectory>指令。或者,您可以通过配置Maven Resources Plugin来设置自定义资源目录。

P.S。:下次请发布完整的堆栈跟踪,而不仅仅是错误消息的一部分。或至少阅读您自己的错误消息。 ;-)你有非常清楚(我故意添加了一些换行符):

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

答案 1 :(得分:0)

我尝试了同样的例子,我首先创建了maven项目,其次是方面编织器依赖项,我添加了1.8.8版本的aspectjweaver的排除,并包含了aspectjweaver 1.8.9版本,并且它有效。

答案 2 :(得分:-1)

问题在于特定版本的maven repository jar&#34; aspectjweaver-1.8.9.jar&#34;。 使用先前版本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>