zoukankan      html  css  js  c++  java
  • spring 切面织入报错:java.lang.ClassCastException: com.sun.proxy.$Proxy7 cannot be cast to...

    报这个错,只有一个原因,就是转化的类型不对.

    接口过父类的子类,在强制转换的时候,一定要用接口父类来定义。

    代码示例:

    package com.luoluo.dao.impl;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    
    import javax.annotation.Resource;
    import javax.sql.DataSource;
    
    import com.luoluo.dao.UserDAO;
    import com.luoluo.model.User;
    
    public class UserDAOImpl implements UserDAO {
    	private DataSource dataSource;
    	
    
    	public DataSource getDataSource() {
    		return dataSource;
    	}
    
    	@Resource
    	public void setDataSource(DataSource dataSource) {
    		this.dataSource = dataSource;
    	}
    	
    	public void save(User user) {
    		//Hibernate
    		//JDBC
    		//XML
    		//NetWork
    		try {
    			Connection conn = dataSource.getConnection();
    			conn.createStatement().executeUpdate("insert into user values (null,'zhang','123456')");
    			conn.close();
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		System.out.println("user saved!");
    	}
    
    	@Override
    	public void delete(User user) {
    		System.out.println("user deleted!");		
    	}
    
    }
    
    package com.luoluo.myapp;
    
    import org.junit.Test;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.luoluo.dao.UserDAO;
    import com.luoluo.dao.impl.LogInterceptor;
    import com.luoluo.model.User;
    
    public class UserServiceTest {
    	@Test
    	public void testAspect(){
    		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] {"servlet-context.xml", "root-context.xml"});
    		UserDAO userDAOImpl=(UserDAO)ctx.getBean("userDAOImpl");//由于UserDAOImpl实现了UserDAO接口,所以强制转换必须用父类UserDAO来定义
    		
    		LogInterceptor logInterceptor =(LogInterceptor) ctx.getBean("logInterceptor");
    		System.out.println(logInterceptor.getClass().getName());
    		userDAOImpl.save(new User());
    		userDAOImpl.delete(new User());
    	}
    
    }
    

      

      

  • 相关阅读:
    深拷贝的终极探索(90%的人都不知道)
    VS Code:让你工作效率翻倍的23个插件和23个编辑技巧
    Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!
    【译】使用 ndb 调试 node 应用
    nodejs的express使用介绍
    Koa 框架教程
    VSCode配置Git随记
    单页面路由原理及实现
    可能比文档还详细--VueRouter完全指北
    急速JavaScript全栈教程
  • 原文地址:https://www.cnblogs.com/vtyluoluo/p/3793069.html
Copyright © 2011-2022 走看看