Spring
-
对Spring的理解
- Spring 是一个轻量级的开发框架,提供了IoC(控制反转)和AOP(面向切面编程)等核心功能。
-
对于IoC的理解
- 控制反转(IoC):由容器来管理对象的创建和依赖关系,而不是由对象自己管理。
- Bean的注入:Spring容器通过依赖注入(DI)将Bean注入到目标对象中。
- byName与byType的区别:byName指定Bean的注入是通过名称匹配,byType是通过类型匹配。
- @Resource与@Autowired的区别:@Resource基于名称进行依赖注入,@Autowired基于类型进行依赖注入。
2.2. Bean是单例还是多例
- 单例与多例的优缺点:
- 单例:在容器生命周期内只有一个实例,节省资源但可能存在线程安全问题。
- 多例:每次请求都创建一个新实例,避免线程安全问题但消耗资源。
2.3. Bean的生命周期
- 单例:随着容器的创建而创建,随着容器的销毁而销毁。
- 多例:每次请求时创建新实例,由JVM的垃圾回收器来管理销毁。
-
对于AOP的理解
- 概念:AOP是一种编程范式,允许将横切关注点(如日志、事务)从业务逻辑中分离出来,提高代码的模块化和可维护性。
- AOP的应用:常见用途包括日志记录和事务管理。
3.3. 代理
- 静态代理:由程序员手动编写代理类。
- 动态代理:
- JDK动态代理:基于接口实现,使用Java标准库提供的Proxy类和InvocationHandler接口。
- CGLIB动态代理:基于类实现,通过继承目标类创建代理对象。
Spring MVC
- 工作流程:Spring MVC框架的请求处理流程包括DispatcherServlet、HandlerMapping、Controller、ViewResolver等组件。
- 常用注解:包括@Controller、@RequestMapping等,用于标识控制器类和处理方法。
MyBatis
-
#与$传参的区别:
- #传参数:预编译,防止SQL注入,适用于传递变量值。
- $传参数:字符串替换,存在SQL注入风险,适用于动态列名。
-
多表联查的关联关系的配置:
- 多对一:使用
<association>
配置。 - 一对多:使用
<collection>
配置。
- 多对一:使用