Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 未定义类型为[duplicated]的限定bean_Spring_Spring Mvc - Fatal编程技术网

Spring 未定义类型为[duplicated]的限定bean

Spring 未定义类型为[duplicated]的限定bean,spring,spring-mvc,Spring,Spring Mvc,目前,如果AOP在我的Knight Bean中实现,我发现BeanNameWare接口不起作用 为什么会这样?因为CGLib冲突?作为参考,我使用SpringFramework 3 这是我的bean代码 public class BraveKnight implements BeanNameAware{ private Quest quest; public void setQuest(Quest mockQuest){ this.quest = mockQue

目前,如果AOP在我的Knight Bean中实现,我发现BeanNameWare接口不起作用

为什么会这样?因为CGLib冲突?作为参考,我使用SpringFramework 3

这是我的bean代码

public class BraveKnight implements BeanNameAware{
    private Quest quest;

    public void setQuest(Quest mockQuest){
        this.quest = mockQuest;
    }

    public void embarkOnQuest(){
        quest.embark();
    }

    @Override
    public void setBeanName(String beanName) {
        System.out.println(beanName +" bean has been initialized..." ); 
    }
}
应用程序上下文

<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="knight" class="com.springinaction.knights.BraveKnight">
        <property name="quest" > <ref bean="quest"/> </property>
    </bean>     

    <bean id="quest" class="com.springinaction.knights.Quest">
        <constructor-arg value="#{T(System).out}" />        
    </bean>

    <bean id="minstrel" class="com.springinaction.knights.Minstrel">
        <constructor-arg value="#{T(System).out}" />        
    </bean>

    <aop:config>
        <aop:aspect ref="minstrel">
            <aop:pointcut id="embark" expression="execution(* *.embarkOnQuest(..))" />

            <aop:before pointcut-ref="embark" method="singBeforeQuest" />

            <aop:after pointcut-ref="embark" method="singAfterQuest" />
        </aop:aspect>
    </aop:config>
</beans>
我的结果是得到了这些错误,所以我怀疑CGLib与SpringAOP冲突

quest bean has been initialized...
knight bean has been initialized...
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.springinaction.knights.BraveKnight] is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:295)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1125)
    at com.springinaction.knights.KnightMain.main(KnightMain.java:10)

同时展示你的主要课程。有些可疑,您显式的
getBean()
调用可能有问题。请编辑问题,将代码添加到那里,而不是添加到注释中。此外,打开Spring框架的日志记录,以便在此处调试和发布日志输出。作为调试步骤,在创建后尝试添加
context.refresh()
。在我添加
context.refresh()
之后,就在
getBean()之后尝试添加
context.refresh()
,我已经将我的spring framework版本从3.2.4切换到了4.2.1,并且它的工作方式与预期的一样,基于CGLIB的代理类不再需要Spring4中的默认构造函数,这里解释了这个源代码>感谢您的努力@chrylis只要您使用现代spring,我建议使用SpringBoot。它在这里消除了大部分样板文件(尽管如果您想将
System.out
in作为bean参数连接,您仍然需要以某种方式指定配置)。
quest bean has been initialized...
knight bean has been initialized...
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.springinaction.knights.BraveKnight] is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:295)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1125)
    at com.springinaction.knights.KnightMain.main(KnightMain.java:10)