我目前正在使用Spring 4.3.4来执行“简单方面示例程序”。我尝试使用XML和Annotation,但它给了我BeanCreationException错误。
使用名称创建bean时出错 'org.springframework.aop.config.internalAutoProxyCreator'
我添加了下面提到的依赖项:
主要
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>
请建议我处理此例外的适当解决方案。
答案 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 。所以请修改您的目录布局,看起来像这样:
这就是我所做的,也是从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>