面试问题(aop默认代理方式是什么)

发布一个k8s部署视频:https://edu.youkuaiyun.com/course/detail/26967

课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。

腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518

第二个视频发布  https://edu.youkuaiyun.com/course/detail/27109

腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518

介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。

第三个视频发布:https://edu.youkuaiyun.com/course/detail/27574

详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件
————————————————

jdk代理,可以通过proxy-target-class修改

proxy-target-class属性值决定是基于接口的还是基于类的代理被创建。

如果proxy-target-class 属性值被设置为true,那么基于类的代理将起作用(这时需要cglib库)。

如果proxy-target-class属值被设置为false或者这个属性被省略,那么标准的JDK 基于接口的代理。

如果不给出 proxy-target-class,就按 proxy-target-class=“false”对待,也即是按JDK proxy来处理的。

### Spring IOC 和 AOP 的原理 #### 1. Spring IOC (Inversion of Control) 原理 IOC 是一种设计思想,核心理念是将对象的创建和依赖关系管理交给外部容器完成,而不是在程序内部手动创建对象。这种思想减少了组件之间的耦合度,提高了系统的可维护性和扩展性。 Spring 容器作为实现 IOC 的载体,负责实例化、配置和组装对象。这些被管理的对象通常被称为 Bean。Spring 使用 XML 配置文件或 Java 注解的方式定义 Bean 及其依赖关系。本质上,IOC 容器可以看作是一个 Map 数据结构,其中 key 表示 Bean 名称,value 则表示对应的对象实例[^3]。 以下是 Spring IOC 的两种主要实现方式: - **基于构造函数注入**:通过构造函数参数传递依赖项。 - **基于 Setter 方法注入**:通过设置属性的方法注入依赖项。 #### 2. Spring AOP (Aspect-Oriented Programming) 原理 AOP 是一种编程范式,旨在通过分离横切关注点(Cross-Cutting Concerns),如日志记录、事务管理和安全性等,提高代码模块化的程度。Spring AOP 主要通过动态代理技术实现在运行时生成代理对象,并拦截目标方法调用,在前后执行增强逻辑。 Spring AOP 支持多种通知类型(Advice): - **Before Advice**:在目标方法执行前触发。 - **After Returning Advice**:在目标方法成功返回后触发。 - **Around Advice**:环绕目标方法执行,允许完全控制方法的行为。 - **Throws Advice**:当目标方法抛出异常时触发。 需要注意的是,Spring AOP 默认仅支持方法级别的切面操作。如果需要更细粒度的支持(例如字段访问或构造函数拦截),则需借助 AspectJ 这样的独立框架[^2]。 --- ### 常见面试题解析 #### 关于 IOC 的常见问题 1. **什么是 IOC?它的作用是什么?** - IOC 即 Inversion of Control(控制反转)。它是一种设计思想,用于降低组件间的耦合度。通过将对象的创建和生命周期管理委托给 Spring 容器,开发者无需关心如何初始化对象及其依赖关系。 2. **Spring 中有哪些类型的 Bean Scope?** - Spring 提供了五种常见的 Bean Scope: - `singleton`:默认范围,整个应用程序共享同一个 Bean 实例。 - `prototype`:每次请求都会创建一个新的 Bean 实例。 - `request`:针对 Web 应用中的每一次 HTTP 请求创建新的 Bean 实例。 - `session`:在整个会话期间保持单个 Bean 实例。 - `application`:在整个 ServletContext 生命周期内只有一个 Bean 实例。 3. **Bean 的生命周期包括哪些阶段?** - Bean 的生命周期分为以下几个阶段: - 实例化:创建 Bean 对象。 - 属性赋值:填充 Bean 的属性。 - 初始化:调用指定的初始化方法。 - 销毁:释放资源并销毁 Bean 实例。 #### 关于 AOP 的常见问题 1. **AOP 的基本概念有哪些?** - AOP 的核心术语包括 Join Point(连接点)、Pointcut(切入点)、Advice(通知)、Aspect(切面)和 Target Object(目标对象)。Join Point 描述了可以在何处应用增强逻辑;Pointcut 定义了一组匹配的 Join Points;Advice 指定了具体的增强行为。 2. **Spring AOP 和 AspectJ 的区别是什么?** - Spring AOP 是轻量级的 AOP 实现,专注于方法级别的切面操作,适合大多数场景下的需求。而 AspectJ 功能更为强大,能够在编译期或类加载期织入切面,适用于需要深入干预底层细节的情况。 3. **如何自定义注解实现 AOP?** - 自定义注解可以通过以下步骤实现: 1. 创建一个带有 @Retention 和 @Target 的自定义注解。 2. 编写一个切面类,利用 @Pointcut 定位标记该注解的目标方法。 3. 在切面中编写 Before/After/Around 等 Advice 来定义具体行为。 下面展示了一个简单的例子: ```java @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface LogExecutionTime { } ``` ```java @Aspect @Component public class LoggingAspect { @Around("@annotation(LogExecutionTime)") public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable { long startTime = System.currentTimeMillis(); Object result = joinPoint.proceed(); // 执行原方法 long endTime = System.currentTimeMillis(); String methodName = joinPoint.getSignature().toShortString(); System.out.println(methodName + " executed in " + (endTime - startTime) + "ms"); return result; } } ``` --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxpjava1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值