Spring连环问
Spring有什么优点吗?
- 轻量,基本版本大约2MB。
- 通过控制反转和依赖注入实现松耦合。
- 支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
- 通过切面和模板减少样板式代码。
- 方便集成各种优秀框架。内部提供了对各种优秀框架的直接支持(如:Hibernate、MyBatis等)。
- 方便程序的测试。Spring支持Junit4,添加注解便可以测试Spring程序。
面向切面,详细讲讲?
- 面向切面(AOP),是面向对象的一种补充,它将一些公共逻辑(如事务管理、日志等)封装成切面,跟业务代码进行分离,可以减少系统的重复代码和降低模块之间的耦合度。
- 切面就是那些与业务无关,但所有业务模块都会调用的公共逻辑。
- 然后AOP有两种实现方式:静态代理和动态代理。
- 静态代理:代理类在编译阶段生成,在编译阶段将通知织入Java字节码中,也称编译时增强。AspectJ使用的是静态代理。
- 动态代理:代理类在程序运行时创建,AOP框架不会去修改字节码,而是在内存中临时生成一个代理对象,在运行期间对业务方法进行增强,不会生成新类。
两种动态代理方式有什么区别呢?
- JDK动态代理。
- 如果目标类实现了接口,Spring AOP会选择使用JDK动态代理目标类。
- 代理类根据目标类实现的接口动态生成,不需要自己编写,生成的动态代理类和目标类都实现相同的接口。
- JDK动态代理的核心是
InvocationHandler
接口和Proxy
类
- JDK动态代理的缺点就是目标类必须有实现的接口。如果某个类没有实现接口,那么这个类就不能用JDK动态代理。
- CGLIB动态代理。
- 如果目标类没有实现接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。
- CGLIB可以在运行时动态生成类的字节码,动态创建目标类的子类对象,在子类对象中增强目标类。
- CGLIB动态代理的优点就是目标类不需要实现特定的接口,更加灵活。
Spring的IOC?
- IOC,即控制反转,就是由Spring容器管理bean的整个生命周期。
- 通过反射实现对其他对象的控制,包括初始化、创建、销毁等,解放手动创建对象的过程,同时降低类之间的耦合度。
- IOC的好处就是降低了类之间的耦合,对象创建和初始化交给Spring容器管理,在需要的时候只需向容器进行申请。
IOC容器初始化的过程?
- 从XML中读取配置文件。
- 将bean标签解析成 BeanDefinition,如解析 property 元素, 并注入到 BeanDefinition 实例中。
- 将 BeanDefinition 注册到容器 BeanDefinitionMap 中。
- BeanFactory 根据 BeanDefinition 的定义信息创建实例化和初始化 bean。
posted @
2022-08-25 00:04
Faetbwac
阅读(
28)
评论()
编辑
收藏
举报