package com.agp.aop.impl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
//CBuyCar接口的实现类Customer
@Component
class Customer implements CBuyCar {
private int money;
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public void buyCar() {
System.out.println(this+"spent"+money+"buy a car");
}
}
//CBuyCar接口
interface CBuyCar {
public void buyCar();
}
//main测试注解的方式。
public class TestAop {public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("aop-first.xml");
CBuyCar cbc=(CBuyCar) ac.getBean("customer");
// Customer c=ac.getBean("customer") ...com.sun.proxy.$Proxy7 cannot be cast to com.agp.aop.impl.Customer
// 提示$Proxy7不能强转为Customer。 说明从AOP容器ac中取出来的时候就是一个代理。这个代理智能强转为接口类型。
// 加入AOP配置后,ac的getBean也不是简单的实例化一个类。 而是通过代理的方式proxy.newinstance(cl,interfaces,invocationhandler)生成一个代理实例。
// 这个代理实例是一个实现了所有interfaces【】的实例。只能强转为接口的实现类对象。 所以这里不能用Customer 只能用CBuyCar。
Customer c=(Customer) cbc;c.setMoney(100000);
cbc.buyCar();
c.buyCar();
}
}