com.sun.proxy.$Proxy2 cannot be cast to com.ysy.cglib.UserDao

初学aop接口

package com.ysy.aspect.xml;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.ysy.cglib.UserDao;

public class TestXmlAspect {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		String xmlpath="com/ysy/aspect/xml/applicationContext.xml";
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlpath);
		//从spring容器中获得内容
		UserDao userDao = (UserDao)applicationContext.getBean("userDao");
		userDao.adduser();	
	}
}

报错:

Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to com.ysy.cglib.UserDao at com.ysy.aspect.xml.TestXmlAspect.main(TestXmlAspect.java:15)
Spring AOP实现方式有两种,一种使用JDK动态代理,另一种通过CGLIB来为目标对象创建代理。如果被代理的目标实现了至少一个接口,则会使用JDK动态代理,所有该目标类型实现的接口都将被代理。若该目标对象没有实现任何接口,则创建一个CGLIB代理,创建的代理类是目标类的子类。
我是通过 JDK动态代理来实现AOP的。但是我的CGLIB类的类名和JDK接口名相同,所以在引包的时候默认选择了cglib类导致出错。
在这里插入图片描述
改成

com.ysy.jdk.UserDao userDao=(com.ysy.jdk.UserDao)applicationContext.getBean("userDao");

就好了

一个不小心,查了好久的报错哈哈。记录一下自己犯傻~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值