没有类型为“Concece”的合格豆类.PerformanceImp'可得到

时间:2018-05-12 16:58:18

标签: java spring javabeans aop spring-aop

我仍然是Spring Framework的初学者,因此我尝试编写一个关于"简介"的程序。在Spring AOP中,但我在编译时遇到错误。请在下面的concert包中找到类:

  

PerformanceImp.java

package concert;

import org.springframework.stereotype.Component;

@Component
public class PerformanceImp implements Performance {
    public void perform() {
        System.out.println("This is the performance function");
    }
}
  

Performance.java

package concert;

public interface Performance {
    public void perform();
}
  

Encoreable.java

package concert;

public interface Encoreable {
    void performEncore();
}
  

DefaultEncoreable.java

package concert;

import org.springframework.stereotype.Component;

@Component
public class DefaultEncoreable implements Encoreable {
    public void performEncore() {
        System.out.println("This is the performEncore function");
    }
}
  

EncoreableIntroducer.java

package concert;
import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.DeclareParents;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class EncoreableIntroducer {
    @DeclareParents(value="concert.Performance+",
            defaultImpl=DefaultEncoreable.class)
    public static Encoreable encoreable;
}
  

ConcertConfig.java

package concert;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Component;

@Configuration
@EnableAspectJAutoProxy
@ComponentScan("concert")
public class ConcertConfig {

}

主要课程:

  

Main.java

package concert;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;


public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(ConcertConfig.class);
        PerformanceImp pi = (PerformanceImp) context.getBean(PerformanceImp.class);
        ((Encoreable) pi).performEncore();
        pi.perform();
    }
}

我收到错误:

Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'concert.PerformanceImp' available

请帮忙吗?

1 个答案:

答案 0 :(得分:0)

尝试:

Performance pi = context.getBean("performanceImp", Performance.class);

而不是:

PerformanceImp pi = (PerformanceImp) context.getBean(PerformanceImp.class);