浏览不良网站会被网警抓吗,什么软件可以看到街景,那个网站建设好,佛山 建站公司代码地址
https://github.com/cmdch2017/JDKproxy.git/
我的理解
我的理解是本身service-serviceImpl结构#xff0c;新增一个代理对象proxy#xff0c;代理对象去直接访问serviceImpl#xff0c;在proxy进行事务的增强操作#xff0c;所以代理对象实现了接口。如何实现…代码地址
https://github.com/cmdch2017/JDKproxy.git/
我的理解
我的理解是本身service-serviceImpl结构新增一个代理对象proxy代理对象去直接访问serviceImpl在proxy进行事务的增强操作所以代理对象实现了接口。如何实现动态呢需要实现InovacationHandler接口并用反射调用invoke方法实现类似于泛型一样的效果。
CHATGPT回答
“JDK动态代理是通过Proxy类和InvocationHandler接口实现的。它允许在运行时生成代理类无需事先定义代理类从而在不修改原有代码的情况下对方法进行增强。通过实现InvocationHandler接口我们可以在目标方法执行前后插入自定义逻辑比如事务处理。动态代理的优势在于避免了手动创建大量代理类的繁琐工作使代码更加简洁和易维护。”
核心代码
客户端
public class TestStudent {public static void main(String[] args) {
// testQuery(1);testQueryObject(1);}
//这里是动态代理多实现了一个InvocationHandlerprivate static void testQueryObject(int id) {DaoTransaction transactionnew DaoTransaction();StudentServiceImpl studentServicenew StudentServiceImpl();TransactionHandler transactionHandlernew TransactionHandler(studentService,transaction);StudentService proxyInstance(StudentService)Proxy.newProxyInstance(StudentServiceImpl.class.getClassLoader(),StudentServiceImpl.class.getInterfaces(),transactionHandler);Student studentproxyInstance.query(id);System.out.println(id:student.getId(),name:student.getName());}
//这里是静态代理private static void testQuery(int id) {DaoTransaction transactionnew DaoTransaction();StudentServiceImpl studentServicenew StudentServiceImpl();ProxyStudent proxyStudentnew ProxyStudent(studentService,transaction);Student studentproxyStudent.query(id);System.out.println(id:student.getId(),name:student.getName());}
}动态代理学生
public class TransactionHandler implements InvocationHandler {private DaoTransaction daoTransaction;private Object object;public TransactionHandler(Object object, DaoTransaction daoTransaction) {this.object object;this.daoTransaction daoTransaction;}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {return method.invoke(object,args);}
}Data
public class Student {private int id;private String name;
}静态代理学生
public class ProxyStudent implements StudentService {private StudentServiceImpl studentService;private DaoTransaction daoTransaction;public ProxyStudent(StudentServiceImpl studentService, DaoTransaction daoTransaction) {this.studentService studentService;this.daoTransaction daoTransaction;}Overridepublic Student query(int id) {daoTransaction.startTransaction();Student studentstudentService.query(id);daoTransaction.endTransaction();return student;}
}public class StudentServiceImpl implements StudentService {Overridepublic Student query(int id) {System.out.println(执行查询);Student studentnew Student();student.setId(id);student.setName(lst);return student;}
}public interface StudentService {Student query(int id);
}
public class DaoTransaction {public void startTransaction() {System.out.println(开启事务);}public void endTransaction() {System.out.println(关闭事务);}
}