Spring 未定义类型为[duplicated]的限定bean
目前,如果AOP在我的Knight Bean中实现,我发现BeanNameWare接口不起作用 为什么会这样?因为CGLib冲突?作为参考,我使用SpringFramework 3 这是我的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
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)