第一步:接口和接口的实现类
//接口
package it.heima.service;
import it.heima.domain.Product;
public interface ProductService {
public void add(Product product);
public void delete(int id);
}
//接口的实现类
package it.heima.service.Impl;
import it.heima.domain.Product;
import it.heima.service.ProductService;
public class ProductServiceImpl implements ProductService {
@Override
public void add(Product product) {
System.out.println("add方法:添加商品");
}
@Override
public void delete(int id) {
System.out.println("delete方法:删除商品");
}
}
第二步:JDK动态代理代码
package ti.heima.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class JDKproxyFactory {
//确定一个要增强的目标类
private Object taget;
//通过构造将其引入本类
public JDKproxyFactory(Object taget){
this.taget=taget;
}
//创建增强功能
public Object createProxyObj(){
return Proxy.newProxyInstance(taget.getClass().getClassLoader(), taget.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("我是增强代码:我在增强:"+method.getName()+"方法");
return method.invoke(taget,args);
}
});
}
}
第三步:测试
public class ProductServiceTest { ProductService productService=new ProductServiceImpl(); Product product = new Product(); //非jdk代理 @Test public void test01(){ productService.add(product); productService.delete(1); } //jdk代理 @Test public void test02(){ //创建JDK代理对象,将目标类作为参数传近构造函数 JDKproxyFactory jdKproxyFactory = new JDKproxyFactory(productService); //JDK代理对象调用自身方法会返回一个Object类型的对象,强转后得到想要的对象 ProductService productService=(ProductService) jdKproxyFactory.createProxyObj(); //调用方法add productService.add(product); //调用方法delete productService.delete(1); } }