spring中两种动态代理方法,jdk动态代理与cglib动态代理。
jdk动态代理是java内置的动态代理,cglib则需要引入jar包(spring中已经有了)。
使用jdk动态代理需要实现接口,而cglib则不需要,他产生的代理类是被代理类子类,通过重写的方法代替父类的方法,并且cglib可以在运行时产生字节码文件。
测试:
IUserService:
package com.itheima.service; public interface IUserService { void save(); }
UserServiceImpl:
package com.itheima.service.impl; import com.itheima.dao.IUserDao; import com.itheima.service.IUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserServiceImpl implements IUserService { @Autowired private IUserDao userDao; public void save() { System.out.println(this.getClass().getName()+" 执行..."); userDao.save(); } }
IUserDao:
package com.itheima.dao; public interface IUserDao { void save(); }
UserDaoImpl:(jdk动态代理)
package com.itheima.dao.impl; import com.itheima.dao.IUserDao; import org.springframework.stereotype.Repository; @Repository public class UserDaoImpl implements IUserDao { @Override public void save() { System.out.println(this.getClass().getName()+" 执行..."); System.out.println("保存用户..."); } }
UserDaoImpl2:(cglib动态代理)
package com.itheima.dao.impl; import org.springframework.stereotype.Repository; @Repository public class UserDaoImpl2{ public void save() { System.out.println(this.getClass().getName()+" 执行..."); System.out.println("保存用户..."); } }
测试类:
package com.itheima.test; import com.itheima.dao.IUserDao; import com.itheima.dao.impl.UserDaoImpl; import com.itheima.dao.impl.UserDaoImpl2; import com.itheima.util.CglibProxy; import com.itheima.util.JdkProxy; import org.junit.Test; public class ProxyTest2 { /** * jdk动态代理测试 */ @Test public void test1(){ //创建jdk动态代理类对象 JdkProxy jdkProxy = new JdkProxy(new UserDaoImpl()); IUserDao userDao = jdkProxy.createInstance(); //调用方法 userDao.save(); } /** * cglib动态代理测试 */ @Test public void test2(){ //创建cglib动态代理类对象 CglibProxy proxy = new CglibProxy(new UserDaoImpl2()); UserDaoImpl2 userDao2 = proxy.newInstance(); //调用方法 userDao2.save(); } }
执行test1结果:
执行test2结果:
推荐一篇博文:http://blog.csdn.net/cckevincyh/article/details/54962920