来几道Java面试题,让你不再摸鱼无聊!(三)
theme: smartblue
这是我参与更文挑战的第16天,活动详情查看: 更文挑战
1. Spring有几种注入的方式?分别是什么?如何注入?
构造器注入:通过类的构造器方法进行注入。
setter方法注入:通过类的set方法进行注入。
静态工厂注入:通过调用静态工厂的方法来获取自己需要的对象,为了让 spring 管理所 有对象,我们不能直接通过"工程类.静态方法()"来获取对象,而是依然通过 spring 注入的形式获 取。
实例工厂注入:是获取对象实例的方法不是静态的,所以你需要首先 new 工厂类,再调用普通的 实例方法。
2. Spring中的AOP有哪些应用场景?
答:权限管理、内容传递处理、异常错误处理、调试、记录日志、事务管理等等。
3. AOP使用了几种代理方式?分别是什么?
答:Spring 提供了两种方式来生成代理对象: JDKProxy 和 Cglib,具体使用哪种方式生成由AopProxyFactory 根据 AdvisedSupport 对象的配置来决定。
默认的策略是如果目标类是接口,则使用 JDK 动态代理技术,否则使用 Cglib 来生成代理。
4. 简述JDK 动态接口代理。
答: JDK 动态代理主要涉及到java.lang.reflect包中的两个类。
Proxy和InvocationHandler;
InvocationHandler是一个接口,通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,动态将横切逻辑和业务逻辑编制在一起。
Proxy 利用 InvocationHandler 动态创建一个符合某一接口的实例,生成目标类的代理对象。
5. 简述CGLib 动态代理。
CGLib 全称为 Code Generation Library,是一个强大的高性能,高质量的代码生成类库,可以在运行期扩展 Java 类与实现 Java 接口,CGLib 封装了 asm,可以再运行期动态生成新的 class。
和 JDK 动态代理相比较:JDK 创建代理有一个限制,就是只能为接口创建代理实例,而对于没有通过接口定义业务方法的类,则可以通过 CGLib 创建动态代理。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)