没有定义类型的限定bean [重复]

时间:2016-01-06 02:42:19

标签: spring spring-mvc

目前,如果AOP在我的Knight Bean中实现,我遇到的BeanNameAware接口无效。

为什么会这样?因为CGLib冲突?作为参考,我使用的是spring framework 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>

[编辑1]:,这是我的主要类,我尝试使用字符串和类的getBean,但似乎没有太大的区别

public static void main(String[] args) throws Exception{ 
   AbstractApplicationContext context = new ClassPathXmlApplicationContext("spring/web/*.xml"); 
   BraveKnight knight = context.getBean(BraveKnight.class); 
   knight.embarkOnQuest(); 
   context.close(); 
}

我的结果是得到这些错误所以我怀疑CGLib与Spring AOP发生冲突?

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)

0 个答案:

没有答案