说一下你对Spring的理解?
Spring是一个轻量级的Java开发框架,为Java开发企业级应用,提高全面的基础支持。
Spring框架核心特性:
- IOC容器:Spring通过控制反转实现了对象的创建和对象间的依赖关系管理
- 开发者只需要定义好Bean及其依赖关系,Spring容器负责创建和组装这些对象
- AOP:面向切面编程,允许开发者定义横切关注点,将横切关注点从业务逻辑中分离出来,提高代码的模块性和可维护性
- 例如事务管理、安全控制等,独立于业务逻辑的代码
- 事务管理:Spring提供了一致的事务管理接口,支持声明式事务和编程式事务
- MVC框架:Spring MVC是一个基于Servlet API构建的Web框架,采用了模型-视图-控制器(MVC)架构
- 支持灵活的URL到页面控制器的映射,以及多种视图技术
IOC和AOP是通过什么机制来实现的?
Spring IOC实现机制
- 反射:Spring IOC容器利用Java的反射机制动态地加载类、创建对象实例及调用对象方法,反射允许在运行时检查类、方法、属性等信息,从而实现灵活的对象实例化和管理
- 依赖注入:IOC的核心就是依赖注入(DI),即容器负责管理组件之间的依赖关系
- Spring通过构造函数注入、属性注入或方法注入,将组件之间的依赖关系描述在配置文件中或使用注解
- 设计模式-工厂模式:Spring IOC容器通常采用工厂模式,来管理对象的创建和生命周期
- 容器作为工厂,负责实例化Bean,并管理它们的生命周期,将Bean的实例化过程交给容器来管理
- 容器实现:Spring IOC容器是实现IOC的核心,通常使用
BeanFactory或ApplicationContext来管理Bean
Spring AOP实现机制
Spring AOP的实现依赖于动态代理技术。动态代理是在运行时动态生成代理对象,而不是在编译时。 它允许开发者在运行时指定要代理的接口和行为,从而实现在不修改源码的情况下增强方法的功能
Spring AOP支持两种动态代理:
- JDK的动态代理:使用
java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口实现,这种方式需要代理的类,实现一个或多个接口 - CGlib的动态代理:当被代理的类没有实现接口时,Spring会使用CGLIB库生成一个被代理类的子类作为代理
- CGLIB(Code Generation Library)是一个第三方代码生成库,通过继承方式实现代理