作者:爱塔居
专栏:JavaEE
目录
一、Spring是什么?
1.1 Spring框架的一些核心特点:
二、IoC(控制反转)是什么?
2.1 实现手段
2.2 依赖注入(DI)的实现原理
2.3 优点
三、AOP(面向切面编程)是什么?
3.1 AOP的组成
3.2 AOP实现技术有哪些?
3.3 优点
四、Bean
4.1 Bean的生命周期
一、Spring是什么?
Spring框架是一种用于构建企业级Java应用程序的开源框架。它提供了一种综合性的编程和配置模型,用于开发灵活、可扩展、可维护的应用程序,用一句话来概括spring,spring是包含了众多工具方法的Ioc容器。
1.1 Spring框架的一些核心特点:
1.轻量级:Spring框架采用了松耦合的设计原则,仅依赖少量的第三方库,开发人员根据选择使用Spring的特定功能,无需引入整个框架。
2.控制反转(Ioc):通过Ioc容器,开发人员可以将对象的创建、组装和生命周期管理交给Spring框架处理。
3.面向切面编程(AOP):可以通过AOP在应用程序中实现横切关注点的模块化。
4.声明式事务管理:通过使用注解或者XML配置,开发人员将事务管理逻辑和业务逻辑分离,并且可以轻松在方法或类级别上应用事务。
5.框架整合:Spring框架可以与许多其他开源框架和技术无缝集成,使得开发人员可以使用Spring框架来整合和协调不同技术。
6.测试支持:Spring框架提供了广泛的测试支持,包括单元测试和集成测试。
二、IoC(控制反转)是什么?
IoC是Spring框架的核心概念之一,用于实现松耦合和可测试的应用程序。在传统的编程模式下,对象之间的创建、组装和管理都是由开发人员手动完成的,而在IoC模式中,对象之间的依赖关系被反转了,即由开发人员手动控制对象之间的依赖关系变为由容器自动注入依赖。
2.1 实现手段
Ioc容器提供以下两种方式来实现控制反转:
1.依赖注入(DI):依赖注入通过将依赖关系注入到对象中,实现了对象之间的解耦。容器负责查找依赖对象,并将其自动注入到相应的对象中。依赖注入可以通过构造函数,Setter方法或接口注入来完成。
2.依赖查找:依赖查找通过容器提供的API,开发人员手动查找和获取所需的依赖对象。开发人员在代码中通过容器提供的接口来获取所需的对象实例,从而实现了对象之间的解耦。
二者区别:依赖注入使将依赖关系委托给容器,由容器来管理对象之间的依赖关系;依赖查找使由对象自己来查找它所依赖的对象,容器只负责管理对象的生命周期。
2.2 依赖注入(DI)的实现原理
DI是通过反射机制实现的。在Spring框架中,当容器创建了一个对象时,它会检测该对象的依赖关系,并使用反射机制查找依赖对象,然后容器将依赖对象注入到该对象中。
当使用@Autowired注释时,Spring容器会自动查找与该类型匹配的bean,并将其注入到该字段中。如果有多个匹配的bean,则可以使用@Qualifier注释来指定要注入的bean的名称。当使用@Value注释时,Spring容器会将属性值注入到该字段中,属性值可以从配置文件中读取,也可以时硬编码的值。
2.3 优点
相比于传统的程序开发,使用IoC的好处在于:
1.降低了传统代码之间的耦合度,使程序变得简单
2.可维护性号,对象更易扩展和重用
3.Ioc容器管理对象,简化开发难度,节省开发时间
三、AOP(面向切面编程)是什么?
AOP是一种软件开发的编程范式,用于将跨越多个模块的关注点从核心业务逻辑中分离出来,使得横切关注点的定义和应用能够更加集中和重用。
3.1 AOP的组成
切面:切面是横切关注点的模块化单元,将通知和切点组合在一起,描述了在何处、何时和如如何应用横切关注点。
切点:用于定义哪些连接点被切面关注,即切面要织入的具体位置
连接点:在程序执行过程中,某个特定点,例如方法调用、异常抛出等
通知:切面在特定切点上执行的代码,包括在连接点之前、之后或周围执行的行为
织入:将切面应用到目标对象中的工程中,可以在编译时、加载时或运行时进行
3.2 AOP实现技术有哪些?
常见实现技术有以下两种:
1.静态代理:静态代理是一种在编译时就已经确定代理关系的代理方式。在静态代理中,代理类和被代理类都要实现同一个接口或继承同一个父类,代理类中包含了被代理类的实例,并在调用被代理类的方法前后执行相应的操作。静态代理的优点是实现简单,易于理解和掌握,但是它的缺点是需要为每个被代理类编写一个代理类,当被代理类的数量增多时,代码量会变得很大。
2.动态代理:动态代理是一种在运行时动态生成代理类的代理方式。在动态代理中,代理类不需要实现同一个接口或继承同一个父类,而是通过 Java 反射机制动态生成代理类,并在调用被代理类的方法前后执行相应的操作。动态代理的优点是可以为多个被代理类生成同一个代理类,从而减少了代码量,但是它的缺点是实现相对复杂,需要了解 Java 反射机制和动态生成字节码的技术。
3.3 优点
1.将横切关注点从应用程序的核心业务逻辑中分离出来,便于更好地实现模块化和复用
2.可以将通用的概念(如日志记录、性能统计、事务管理)封装成切面,如何在需要的地方进行重用,从而提高代码的可维护性和可重用性)
四、Bean
在Spring中,Bean是指被Spring容器管理的对象。
4.1 Bean的生命周期
在Spring中,Bean的生命周期指的是Bean实例从创建到销毁的整个过程。
Bean的生命周期可以分为以下几个阶段:
1.实例化
在Spring容器启动时,会根据配置文件或注解等方式创建Bean的实例,也就是说实例化就是为了Bean对象分配内存空间。根据Bean的作用域不同,实例化的方式也不同
2.属性赋值
在Bean实例化后,Spring容器会自动将配置文件或注解中的属性值注入到Bean中。属性注入可以通过构造函数注入、Setter方法注入、注解注入等方式实现。
3.初始化
在属性注入完成后,Spring容器会调用Bean的初始化方法。在初始化方法中,可以进行一些初始化操作,例如建立数据库、加载配置文件等
4.使用
在Bean初始化完成后,Bean就可以被应用程序使用了。在应用程序中,可以通过Spring容器获取Bean的实例,并调动Bean的方法。
5.销毁
在应用程序关闭时,Spring容器会自动销毁所有的Bean实例。在销毁方法中,可以进行一些清理操作,例如释放资源、关闭数据库连接等。