异常: Error creating bean with name 'PetinfoDAO' defined in class path resource

本文探讨了一个关于 Spring 框架中 AOP 注解配置引起的问题,具体表现为使用 @Before, @After 和 @AfterThrowing 注解时出现的错误。通过调整注解表达式的范围,最终解决了 AspectJ 表达式解析失败的问题。

问题描述:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'PetinfoDAO' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:478)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
 at java.security.AccessController.doPrivileged(Native Method)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
 at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
 at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:220)
 at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
 at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
 at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
 at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
 at com.e_pet.test.TestPetInfoBizImpl.<init>(TestPetInfoBizImpl.java:32)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
 at org.junit.internal.runners.TestClassMethodsRunner.createTest(TestClassMethodsRunner.java:52)
 at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:58)
 at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
 at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
 at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
 at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut
 at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:316)
 at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:205)
 at org.springframework.aop.aspectj.AspectJExpressionPointcut.checkReadyToMatch(AspectJExpressionPointcut.java:192)
 at org.springframework.aop.aspectj.AspectJExpressionPointcut.getClassFilter(AspectJExpressionPointcut.java:173)
 at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:198)
 at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:253)
 at org.springframework.aop.support.AopUtils.findAdvisorsThatCanApply(AopUtils.java:287)
 at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply(AbstractAdvisorAutoProxyCreator.java:113)
 at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:85)
 at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:66)
 at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:345)
 at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:309)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:361)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1342)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:471)
 ... 30 more
解决办法:

 @Before("execution(public * com.e_pet.biz.*.*(..))")
1. public void before(String a,int b){
  System.out.println("事务执行之前就执行了这个方法!");
  HibernateSessionFactory.beginTransaction();
       
 }
2.    @After("execution(public * com.e_pet.biz.*.*(..))")
 public void afterReturning(){
  HibernateSessionFactory.commitTransaction();
  System.out.println("事务执行之后就执行了这个方法!");
 }
3.   @AfterThrowing("execution(public * com.e_pet.biz.*.*(..))")
 public void afterThrowing(){
  System.out.println("提交数据发生异常时就执行了这个方法!");
  HibernateSessionFactory.roolbackTransaction();
 }

就像 1 那样,就会导致上面的错误信息显示,并且也不会有注解的标识符号!

在 Spring 框架中,当出现 `Error creating bean with name 'formContentFilter' defined in class path resource` 的错误时,通常表明在创建该 Bean 的过程中发生了异常。这种问题可能涉及配置、依赖项或版本兼容性等方面。 ### 错误分析 - **Bean 创建失败**:Spring 在启动时会加载配置并初始化各类 Bean,如果某个 Bean 无法正确实例化,就会抛出 `BeanCreationException`。 - **`formContentFilter` 的作用**:这个 Filter 是 Spring Web MVC 中用于支持 PUT、PATCH 和 DELETE 请求的 HTTP 方法转换工具,它通常通过 `<filter>` 配置在 `web.xml` 或通过 Java 配置类启用。 ### 常见原因及解决方案 #### 1. 缺少必要的依赖库 确保项目中引入了正确的 Spring Web 模块,例如 `spring-webmvc` 或 `spring-web`,否则可能导致类找不到的问题。Maven 示例如下: ```xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.20</version> </dependency> ``` 如果使用 Spring Boot,则应检查是否引入了 `spring-boot-starter-web` [^3]。 #### 2. 配置文件错误 若手动配置了 `formContentFilter`,请检查 XML 配置文件中的拼写、路径或命名空间是否正确。例如: ```xml <bean id="formContentFilter" class="org.springframework.web.filter.FormContentFilter"/> ``` 或者在 Java 配置类中添加: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Bean public FormContentFilter formContentFilter() { return new FormContentFilter(); } } ``` 确保没有语法错误或重复定义 [^1]。 #### 3. 版本不兼容 如果 Spring Framework 的版本较低(如 4.x),而使用的 JDK 版本较高(如 JDK 17+),可能会导致类找不到或初始化失败。建议升级到 Spring 5.x 并确保与 JDK 兼容 [^3]。 #### 4. 类路径冲突 多个不同版本的 Spring 库同时存在可能导致类加载冲突。检查 Maven 或 Gradle 的依赖树,排除冲突的依赖项。例如,在 Maven 中可以使用 `<exclusion>` 标签进行处理 [^2]。 --- ### 示例修复代码(Java 配置) ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.filter.FormContentFilter; @Configuration public class FilterConfig { @Bean public FormContentFilter formContentFilter() { return new FormContentFilter(); } } ``` --- ### 示例修复代码(XML 配置) ```xml <beans xmlns="http://www.springframework.org/schema/beans" 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"> <bean id="formContentFilter" class="org.springframework.web.filter.FormContentFilter"/> </beans> ``` --- ### 总结 解决此类问题的关键在于: - 确保所有依赖项正确无误; - 检查配置文件是否有拼写或结构错误; - 使用兼容的 Spring 和 JDK 版本; - 清理构建工具缓存,重新下载依赖。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值