SSM相关问题-2

简介: 代理是通过代理对象访问目标对象,以在不修改原代码的情况下增强方法功能。静态代理需手动编写代理类,而动态代理在运行时生成,无需手动编写。JDK动态代理基于反射,仅支持接口;CGLIB通过继承子类实现,支持类代理但不适用于final类或方法。

Q:什么是代理?静态代理和动态代理的区别?JDK代理和CGLIB代理的区别?

代理就是说通过一个代理对象来访问目标对象,目的是在不修改目标对象类的代码的情况下,对原有的方法进行增强


静态代理:代理类和目标类在编译期就已确认,代理类需要手动编写,且代理类与目标类需要实现同一个接口

动态代理:代理类在运行时动态生成,不需要手动编写代理类,适用于需要多个类生成代理类的场景

JDK动态代理

原理:基于Java反射机制,在运行时创建目标接口的代理类,拦截方法调用并织入切面逻辑

优缺点:
  • 纯java实现,无需额外的依赖
  • 轻量级,运行时生成代理类速度快
  • (缺点)仅支持接口,目标类必须至少实现一个接口
2.CGLIB代理

原理:通过继承子类,运行时生成子类,重写目标方法以织入切面逻辑

优缺点:

  • 支持类代理,无需目标类实现接口
  • final/方法不支持,无法代理有final修饰的类或方法
  • 性能开销,生成代理类的速度低于JDK动态代理


Q:事务的特征

  • 原子性:事务中的所有操作要么全部完成,要么全部不执行。
  • 一致性:事务执行的结果必须使数据库从一个一致性状态转换到另一个一致性状态。
  • 隔离性:多个事务并发执行时,一个事务的操作不应该影响其他事务。
  • 持久性:一旦事务提交,它对数据库的改变就是永久性的。

事务的特性有四种,分别是原子性,一致性,隔离性,持久性



Q:Srping的Bean生命周期

1.实例化:第1步,实例化一个bean对象;

2.属性赋值:第2步,为bean设置相关属性依赖;

3.初始化:第3~7步,步骤较多,第3、4步在初始化前执行。第5、6步为初始化操作。第7步在初始化后执行,该阶段结束才能被用户使用

4.销毁:第8~10步,第8步不是真正意义的销毁(因为下一步才正式使用),但是在这一步会注册销毁的相关调用接口,在第9、10步真正的销毁bean时执行对应的方法



目录
相关文章
|
Java 存储
线程池的核心参数有哪些?
线程池七大核心参数:核心/最大线程数、线程保持时间及单位、阻塞队列、线程工厂与拒绝策略。
762 79
|
5月前
|
SQL 缓存 Java
MyBatis场景面试题
MyBatis与MyBatisPlus均属ORM框架,前者擅长复杂SQL及动态查询,后者封装API简化单表操作。常用XML标签如if、foreach提升SQL灵活性。MyBatis支持一级(SqlSession级)与二级(NameSpace级)缓存,提升查询效率。#{}防SQL注入,${}用于动态表名等场景。
280 62
|
5月前
|
存储 SQL 关系型数据库
MySQL 核心知识与索引优化全解析
本文系统梳理了 MySQL 的核心知识与索引优化策略。在基础概念部分,阐述了 char 与 varchar 在存储方式和性能上的差异,以及事务的 ACID 特性、并发事务问题及对应的隔离级别(MySQL 默认 REPEATABLE READ)。 索引基础部分,详解了 InnoDB 默认的 B+tree 索引结构(多路平衡树、叶子节点存数据、双向链表支持区间查询),区分了聚簇索引(数据与索引共存,唯一)和二级索引(数据与索引分离,多个),解释了回表查询的概念及优化方法,并分析了 B+tree 作为索引结构的优势(树高低、效率稳、支持区间查询)。 索引优化部分,列出了索引创建的六大原则
140 2
|
5月前
什么是AOP
AOP(面向切面编程)是一种编程范式,旨在将横切关注点(如日志、事务管理)从业务逻辑中分离,提升代码模块化与可维护性。核心概念包括:切面(封装横切逻辑)、通知(定义执行时机)、切入点(指定应用位置)、织入(整合切面与业务逻辑)。常见通知类型有前置、后置、返回、异常和环绕通知。
377 1
|
5月前
|
前端开发 Java Spring
SpringMvC的执行流程
客户端发送HTTP请求,Spring MVC的前端控制器DispatcherServlet接收请求并调用HandlerMapper进行映射,返回包含Controller和拦截器的执行链。控制器执行逻辑后返回ModelAndView,前端控制器再调用ViewResolver解析视图并渲染HTML页面,最终返回给客户端。
255 0
|
5月前
|
存储 算法 索引
HashMap的实现原理
HashMap基于哈希算法实现,采用链表散列结构(数组+链表/红黑树)。JDK1.8前使用拉链法解决冲突,将冲突元素存入链表。JDK1.8后,当链表长度超过8时,转化为红黑树以提升查找效率;当元素数小于6时,退化为链表。通过key的hashCode计算索引,put时若key相同则覆盖,不同则添加到链表或树中。get时通过hash值定位并判断key获取对应值。
282 0
|
5月前
|
SQL 前端开发 Java
Spring的三层架构
Spring MVC 三层架构(表现层、业务层、数据访问层)通过职责分离提升代码可维护性与扩展性。表现层(Controller)接收请求并返回响应;业务层(Service)处理核心逻辑与事务;数据访问层(Mapper)负责数据库操作与数据映射,共同实现高效、清晰的系统开发。
424 0
|
5月前
|
Java Spring 容器
DI依赖注入的几种手段
本内容介绍了依赖注入的四种方式:构造器注入、接口注入、Setter注入和注解注入,并重点比较了Spring中的@Autowired与Java标准注解@Resource的区别,包括来源和依赖查找策略。
288 0
|
6月前
|
机器学习/深度学习 SQL 数据采集
大数据行业权威认证盘点:这些证书让你的简历更受大厂青睐
这些认证不仅能够为求职者提供有力的能力证明,更能帮助HR快速识别符合岗位要求的技术人才。对于希望进入大数据领域的从业者来说,选择适合自身职业规划的认证,将大大提升职业竞争力。
|
存储 机器学习/深度学习 人工智能
【LangChain系列】第一篇:文档加载简介及实践
【5月更文挑战第14天】 LangChain提供80多种文档加载器,简化了从PDF、网站、YouTube视频和Notion等多来源加载与标准化数据的过程。这些加载器将不同格式的数据转化为标准文档对象,便于机器学习工作流程中的数据处理。文中介绍了非结构化、专有和结构化数据的加载示例,包括PDF、YouTube视频、网站和Notion数据库的加载方法。通过LangChain,用户能轻松集成和交互各类数据源,加速智能应用的开发。
701 1