java中代理模式有哪些分类?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、浮点类型,用来表示小数的数据类型。3、字符类型,字符类型的关键字是“char”。4、布尔类型,是表示逻辑值的基本数据类型。
1.静态代理
由程序员创建或者由第三方工具生成,再进行编译;在程序运行之前,代理类的.class文件已经存在了。静态代理通常只代理一个类,并且要事先知道代理的是什么。
public class BlogStaticProxy implements IBlogService{
private IBlogService blogService;
public BlogStaticProxy(IBlogService blogService) {
this.blogService = blogService;
}
@Override
public void writeBlog() {
System.out.println("start writing...");
blogService.writeBlog();
System.out.println("end writing...");
}
}
2.动态代理
动态代理的代理类在程序运行前是不存在的,也就是说代理类在程序运行时才创建的代理模式成为动态代理。这种情况下,代理类并不是在Java代码中定义好的,而是在程序运行时根据我们的在Java代码中的“指示”动态生成的。
public class MainClass {
public static void main(String[] args) {
//1、创建一个真实角色
Singer target = new Singer();
//2、调用Proxy.newProxyInstance方法,并构造一个InvocationHandler对象,
//3、在对象内部重写invoke方法,同时调用method.invoke(target,args);
//4、并在该方法的上下添加自己的代码逻辑
//其中:target.getClass().getClassLoader():获取类加载器,用来生成代理对象;
// target.getClass().getInterfaces()获取接口元信息;
ISinger iSinger = (ISinger) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("动态代理---向观众问好");//在真实对象的方法被调用“前”编写自己的业务逻辑
Object returnValue = method.invoke(target,args);//此处通过反射调用真实对象对应的方法;
System.out.println("动态代理---向观众问好");//在真实对象的方法被调用“后”编写自己的业务逻辑
return returnValue;
}
});
iSinger.sing();
}
}
//测试结果
"C:\Program Files\Java\jdk1.8.0_211\bin\java.exe" "-javaagent:C:\Program.......
动态代理---向观众问好
sing a song
动态代理---向观众问好
Process finished with exit code 0
关于java中代理模式有哪些分类问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://www.py.cn/jishu/jichu/23425.html