面试官:什么是静态代理?什么是动态代理?注解、反射你会吗?

本文通过一个面试场景,详细介绍了Java中的静态代理和动态代理,包括静态代理的实现原理和优缺点,以及动态代理的JDK实现和CGLib实现。同时,讨论了注解的使用及其解决的问题,以及如何自定义注解。最后,简要概述了Java反射机制的基本概念和特点。
摘要由CSDN通过智能技术生成

前言

开场

一位穿着蓝色衬衫,牛仔裤,拿着一个白色保温杯的中年男子急匆匆地坐在你对面,看样子是项目上的东西很急,估摸面试时间不会太长,这样一想心情放松了许多…(后来我就被打脸了)

面试开始

面试官:小伙子,我看你的简历上说精通java基础对吧,那我先简单来问几个java基础。

好的好的,面试官你问。(一听到简单两个字就内心窃喜…)

面试官:你知道Java中有个东西叫代理吗?

知道知道,代理就是通过代理对象去访问实际的目标对象,比如我们在生活中租房,可以直接找房东,也可以通过某些租房平台去租房,通过租房平台的这种方式就是代理。在java中这种租房平台就被叫做代理类,代理类不仅能实现目标对象,还能增加一些额外的功能。据我所知java中的代理方式有静态代理和动态代理。(这个时候面试官很大概率会问你这两种代理模式)。

面试官:没想到你还能通过生活中的现象去理解代码,不错不错,我看你提到了静态代理和动态代理,那你给我说说什么是静态代理吧

(果然问了,还好我做了准备)静态代理就是在代码运行之前,这个代理类就已经存在了。还是以上面的租房为例,在代码中会首先创建一个通用的租房接口:

public interface Room {
   
    void rent();
}1.2.3.

然后需要有一个被代理的类(或者称为真实的类)和一个代理类:

public class RealRoom implements Room {
   
    private String roomname;
    public RealRoom(String roomname) {
   
        this.roomname = roomname;
    }
    public void rent() {
   
        System.out.println("租了"+roomname);
    }
}1.2.3.4.5.6.7.8.9.

代理类如下:

public class ProxyClass implements Room {
   
    RealRoom realRoom;
    public ProxyClass(RealRoom realRoom) {
   
        this.realRoom = realRoom;
    }
    public void rent() {
   
        System.out.println("租房前收取中介费");
        realRoom.rent();
        System.out.println("租房后收取服务费");
    }
}1.2.3.4.5.6.7.8.9.10.11.

代理类可以在不改变被代理对象的情况下增加功能,最后我们测试一下这个静态代理:

public class Main {
   
    public static void main(String[] args) {
   
        RealRoom realRoom =new RealRoom("碧桂园");
        ProxyClass proxyClass=new ProxyClass
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值