spring - 如何解决 "FactoryBean threw exception on object creation;"

标签 spring

我正在 spring aop 中尝试“beforeAdvice”而不是“JointPoints”。这很简单,我调用目标方法。在执行目标类方法之前,应该执行 before() 方法。

客户端应用程序:

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import com.nt.services.LoanApprover;

public class ClientApp {
public static void main(String[] args) {
//activate ioc container
ApplicationContext context = new FileSystemXmlApplicationContext("src/com/nt/cfgs/applicationContext.xml");
//get bean
LoanApprover approver = context.getBean("pfb",LoanApprover.class);
//call b.method
approver.approver();
}
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<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-4.0.xsd">
<bean id="auditAdvice" class="com.nt.aspect.MyBeforeAdvice" />
<bean id="target" class="com.nt.services.LoanApprover" />
<bean id="pfb" class="
    org.springframework.aop.framework.ProxyFactoryBean ">
    <property name="target" ref="target" />
    <property name="interceptorNames">
        <list>
            <value>
                auditAdvice
            </value>
        </list>
    </property>
</bean>
</beans>

MyBeforeAdvice.java

import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
public class MyBeforeAdvice implements MethodBeforeAdvice{
@Override
public void before(Method method, Object[] args, Object target)
        throws Throwable {
    System.out.println("I am in MyBeforeAdvice class");
}
}

LoanApprover.java

public class LoanApprover {
public void approver(){
    System.out.println("I am in LoanApprover method");
}
}

当我运行此应用程序时,我收到此异常。

Aug 13, 2015 12:16:04 PM     org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing     org.springframework.context.support.FileSystemXmlApplicationContext@7c6cd67b:     startup date [Thu Aug 13 12:16:04 IST 2015]; root of context hierarchy
Aug 13, 2015 12:16:04 PM     org.springframework.beans.factory.xml.XmlBeanDefinitionReader     loadBeanDefinitions
INFO: Loading XML bean definitions from file     [G:\java\Frameworks\SpringAOP\AOPProj3(Before     Advice)\src\com\nt\cfgs\applicationContext.xml]
Exception in thread "main"     org.springframework.beans.factory.BeanCreationException: Error creating bean     with name 'pfb': FactoryBean threw exception on object creation; nested     exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No     bean named '
                    auditAdvice
            ' is defined
at     org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObject     FromFactoryBean(FactoryBeanRegistrySupport.java:175)
at     org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFr    omFactoryBean(FactoryBeanRegistrySupport.java:103)
at     org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanIn    stance(AbstractBeanFactory.java:1517)
  at      org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(Abstract    BeanFactory.java:251)
at     org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBe    anFactory.java:199)
 at     org.springframework.context.support.AbstractApplicationContext.getBean(AbstractA    pplicationContext.java:962)
at test.ClientApp.main(ClientApp.java:13)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:   No bean named '
                auditAdvice
            ' is defined
at     org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefi    nition(DefaultListableBeanFactory.java:694)
at   org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBean    Definition(AbstractBeanFactory.java:1168)
at      org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(Abstract    BeanFactory.java:281)
at  org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBe    anFactory.java:194)
at org.springframework.aop.framework.ProxyFactoryBean.initializeAdvisorChain(ProxyF    actoryBean.java:460)
at org.springframework.aop.framework.ProxyFactoryBean.getObject(ProxyFactoryBean.ja    va:244)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObject    FromFactoryBean(FactoryBeanRegistrySupport.java:168)
... 6 more

请有人告诉我为什么会出现此异常?

最佳答案

简单地改变

<value>
    auditAdvice
</value>

<value>auditAdvice</value>

Spring 似乎在这里使用空格和换行符作为 ID。 有关该主题的更多信息,请访问 here 。 希望有帮助。

关于spring - 如何解决 "FactoryBean threw exception on object creation;",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31981689/

相关文章:

java - Spring Bean创建顺序 WebMvcConfigurerAdapter

java - 静态函数中@Value注解的替代方法

必须指定 Spring Security authenticationmanager - 用于自定义过滤器

java - 使用 @Pattern 验证 UUID 或 UUID.toString()

java - 将请求范围的 bean 注入(inject) session 范围的 bean

java.lang.NoSuchMethodError : org. springframework.util.ReflectionUtils.clearCache()

java - 事务更改的子集有时在提交后不久不可见

javascript - 如何将数据从Java方法发送到javascript函数?

java - 如何通过 Spring Boot 使用相同的实体连接 3 个数据库?

java - Bean 验证仅适用于 Spring 中的 Controller 方法?