Bean named ‘ServiceImpl33’ is expected to be of type ‘com.Serviced.ServiceImpl33’ but was actually of type 'com.sun.proxy.$Proxy3’
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
ServiceImpl33 serviceImpl = context.getBean("ServiceImpl33", ServiceImpl33.class);
serviceImpl.add();
}
//通过Proxy获取代理对象
public Object getProxyInstance(){
//返回指定接口的代理类的实例,该接口将方法调用分派给指定的 调用处理程序 (InvocationHandler,this继承InvocationHandler,使用本类即可)。
//通过this(调用程序管理器)来调用Invoke放来掉欧调用代理方法
return Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(),this);
}
使用aop动态代理时,从target.getClass().getInterfaces()可以看出,动态代理代理的是接口,所以context.getBean();返回的是接口,而不是实现类
修改后
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Service serviceImpl = (Service) context.getBean("ServiceImpl33");
serviceImpl.add();
}