实现接口

时间:2016-09-16 09:34:09

标签: java spring aop spring-aop

我正在使用@AspectJ在Spring中研究面向方面编程 我写了一个例子,但是当我运行它时,我发现了一个错误 这是我写的课程

    package concert;

/**
 *
 * @author phate
 */
public interface Performance {
    public void perform();
}

Class PerformanceImpl实现了Performance接口并实现了perform方法

package concert;


import org.springframework.stereotype.Service;

/**
 *
 * @author Dennis A. Boanini
 */
@Service
public class PerformanceImpl implements Performance{

    @Override
    public void perform() {
        System.out.println("perform");
    }

}

Class Audience使用@Aspect注释并声明一些建议

package concert;

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 *
 * @author Dennis A. Boanini
 */
@Component
@Aspect
public class Audience {

    @Before("execution(* concert.Performance.perform(..))")
    public void silenceCellPhones(){
        System.out.println("Silencing cell phones");
    }

    @Before("execution(* concert.Performance.perform(..))")
    public void takeSeats(){
        System.out.println("Taking seats");
    }

    @AfterReturning("execution(* concert.Performance.perform(..))")
    public void applause(){
        System.out.println("CLAP CLAP CLAP");
    }

    @AfterThrowing("execution(* concert.Performance.perform(..))")
    public void demandRefund(){
        System.out.println("Demanding a refund");
    }
}

类ConcertConfig是autoproxy的bean

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;

/**
 *
 * @author Dennis A. Boanini
 */
@Configuration
@EnableAspectJAutoProxy
@ComponentScan
public class ConcertConfig{

    @Bean
    public Audience audience() {
        return new Audience();
    }
}

这是主要的课程

public class Turing {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
        ctx.register(ConcertConfig.class);
        ctx.refresh();
        Performance userService = ctx.getBean(PerformanceImpl.class);
        userService.perform();

    }
}

如果我跑,我会收到此错误

Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [concert.PerformanceImpl] is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:374)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:334)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1088)
    at com.phate.spring.aop.example.Turing.main(Turing.java:32)

但如果我取消界面一切正常,为什么?

0 个答案:

没有答案