SPRING概述
Spring是一个开源的Java框架,它提供了一种轻量级的、非侵入式的开发方式,用于构建企业级应用程序和服务。Spring的目标是简化Java应用程序的开发,并提供一种灵活的编程模型。
Spring框架的核心特点包括:
-
IoC容器(Inversion of Control,控制反转):IoC是Spring框架的核心概念之一,它通过将对象的创建和管理工作交给Spring容器来实现,开发人员只需声明对象的依赖关系,而不需要显式地创建和管理对象。这种解耦方式可以降低组件之间的耦合性,提高代码的可重用性和可测试性。
-
依赖注入(Dependency Injection,DI):依赖注入是IoC的一种实现方式,它通过将依赖对象注入到需要它的对象中,解决了对象之间的依赖关系。Spring框架通过注解或配置文件的方式实现依赖注入,使得对象之间的关系更加清晰和可配置。
-
面向切面编程(Aspect-Oriented Programming,AOP):AOP是一种编程范式,它可以将横切关注点(如日志记录、事务管理等)从主要业务逻辑中分离出来,提高了代码的模块化和可维护性。Spring框架提供了AOP的支持,开发人员可以使用切面来定义和管理横切关注点。
-
Spring MVC:Spring MVC是Spring框架的一个模块,用于开发基于MVC(Model-View-Controller)模式的Web应用程序。它提供了一套灵活的Web开发框架,支持处理HTTP请求、路由、视图渲染等功能。
-
集成其他框架和技术:Spring框架可以与其他框架和技术(如Hibernate、MyBatis、JPA等)无缝集成,提供了丰富的API和配置选项,使得开发人员可以根据需求选择适合的组件和工具。
总的来说,Spring框架通过提供IoC容器、依赖注入、AOP和Web开发支持等功能,简化了Java应用程序的开发过程,并促进了代码的可维护性、可测试性和扩展性。它已经成为企业级Java应用程序开发的主流框架之一。
IOC容器
IOC概念
IOC(Inversion of Control,控制反转)容器是Spring框架的核心组件之一,它负责管理和组织应用程序中的对象(也称为Bean)。IOC容器通过控制对象的创建、配置和生命周期管理,将这些职责从应用程序代码中解耦出来。
在传统的开发模式中,开发人员通常需要手动创建和管理对象的依赖关系。但是在Spring框架中,IOC容器将这项工作交给了自己来完成。开发人员只需声明对象之间的依赖关系,而无需显式地创建和管理对象。
IOC容器的主要作用有:
-
对象的创建和管理:IOC容器负责创建对象实例,并管理它们的生命周期。开发人员只需声明对象的依赖关系,容器会负责根据配置信息实例化相应的对象。
-
依赖注入:IOC容器通过依赖注入(Dependency Injection,DI)将依赖对象注入到需要它的对象中。依赖注入可以通过构造函数、Setter方法或字段注入的方式实现。开发人员只需定义依赖关系,容器会负责将依赖对象注入到相应的位置。
-
对象的配置管理:IOC容器提供了灵活的配置方式,可以使用XML配置文件、注解或Java代码来描述对象的创建和依赖关系。通过配置管理,可以实现对象的灵活组装和切换,使得系统的配置更加可扩展和可配置。
-
AOP集成:IOC容器与面向切面编程(AOP)密切相关。容器可以通过AOP的方式在对象的创建和管理过程中插入横切关注点,实现诸如事务管理、日志记录、安全性检查等通用功能。
在Spring框架中,有多个IOC容器的实现可供选择,其中最常用的是ApplicationContext。ApplicationContext是BeanFactory接口的一个实现,它提供了更多的功能和扩展,如国际化支持、事件发布、Web应用程序的特殊集成等。
通过使用IOC容器,开发人员可以实现解耦、可测试和可扩展的应用程序,提高代码的可维护性和可重用性。
IOC底层原理
- xml解析、工厂模式、反射
IOC(接口)
-
IOC的思想基于IOC容器完成,IOC底层本质上就是对象工厂;
-
Spring提供IOC容器实现的两种方式;(两个接口)
- BeanFactory:IOC容器的基本实现,是Spring内部的使用接口,不提供开发人员进行使用。加载配置文件时不会创建对象,在获取对象才会创建对象。
- ApplicationContext:BeanFactory的子接口,提供更多强大的功能,一般由开发人员使用。加载配置文件时就会把在配置文件对象进行创建。
-
ApplicationContext接口实现类
在Spring框架中,有多个ApplicationContext的实现类可供选择,每个实现类都针对不同的使用场景和环境提供了特定的功能和扩展。以下是几个常用的ApplicationContext实现类:
-
ClassPathXmlApplicationContext:ClassPathXmlApplicationContext是从类路径下的XML配置文件加载ApplicationContext的实现类。它会在类路径下查找并加载指定的XML配置文件,根据配置文件中的定义创建和管理对象。这是最常用的ApplicationContext实现类之一。
-
FileSystemXmlApplicationContext:FileSystemXmlApplicationContext是从文件系统中的XML配置文件加载ApplicationContext的实现类。它可以根据文件系统路径加载XML配置文件,并创建和管理对象。相比于ClassPathXmlApplicationContext,它更适合于在开发过程中指定具体的文件路径。
-
XmlWebApplicationContext:XmlWebApplicationContext是在Web应用程序环境中使用的ApplicationContext实现类。它可以从Web应用程序的配置文件中加载ApplicationContext,提供了对Web特定功能的支持,如处理Servlet、监听器和过滤器等。
-
AnnotationConfigApplicationContext:AnnotationConfigApplicationContext是基于Java配置的ApplicationContext实现类。它不使用XML配置文件,而是通过注解和Java类来定义Bean和配置信息。开发人员可以使用@Configuration和@Bean等注解来声明配置类和Bean定义,从而实现ApplicationContext的创建和管理。
除了上述常用的实现类,Spring还提供了其他一些特定场景下的ApplicationContext实现类,如:
-
StaticApplicationContext:用于在静态环境下创建和管理ApplicationContext的实现类,适用于一些非常特殊的使用场景。
-
AnnotationConfigWebApplicationContext:用于在Web应用程序中使用基于注解的配置的ApplicationContext实现类,结合了XmlWebApplicationContext和AnnotationConfigApplicationContext的功能。
这些ApplicationContext的实现类提供了不同的加载和配置方式,可以根据具体的需求选择合适的实现类来创建和管理Spring的ApplicationContext容器。
-
IOC操作Bean管理
1.什么是Bean管理
- Bean管理指的是两个操作;
- Spring 创建对象;
- Spring 注入属性。
2.Bean管理操作有两种方式
- 基于xml配置文件方式实现;
- 基于注解方式实现;
3.IOC操作Bean管理(基于xml方式)
(1)基于xml方式创建对象
<bean id="dao" class="com.kgh.demo.dao.book"></bean>
-
在spring配置文件中,使用bean标签,标签里面添加对应的属性,就可以实现对象的创建;
-
在bean标签有很多属性,介绍常用的属性;
- id属性:唯一标识
- name属性:类全路径
-
创建对象时候,默认也是执行无参构造方法完成对象创建。
(2)基于xml方式注入属性
-
DI:依赖注入,就是注入属性;
(3)第一种注入方式,set方法注入
使用set方法原始方法注入
public class book { private String bname; private String bauthor; public void setBname(String bname) { this.bname = bname; } public void setBauthor(String bauthor) { this.bauthor = bauthor; } public static void main(String[] args) { book book = new book(); book.setBauthor("罗贯中"); book.setBname("三国演义"); } }
在spring配置文件配置对象创建,配置属性注入
<bean id="dao" class="com.kgh.demo.dao.book"> <property name="bname" value="三国演义"/> <property name="bauthor" value="罗贯中"/> </bean>
(4)第二种注入方式,使用有参构造进行注入
索引方式注入
<bean id="dao" class="com.kgh.demo.dao.book"> <constructor-arg index="0" value="三国演义"/> <constructor-arg index="1" value="罗贯中"/> </bean>
name属性注入
<bean id="dao" class="com.kgh.demo.dao.book"> <constructor-arg name="bname" value="三国演义"/> <constructor-arg name="bauthor" value="罗贯中"/> </bean>
AOP
AOP概念
AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,旨在解决在应用程序中散布的横切关注点(Cross-cutting Concerns)的问题。横切关注点是那些不属于核心业务逻辑但在多个组件中存在的功能,例如日志记录、事务管理、安全性检查等。
AOP通过将横切关注点从主要业务逻辑中分离出来,提高了代码的模块化和可维护性。它通过定义切面(Aspect)来实现这一目标,切面可以独立地描述横切关注点,并将其应用到需要的组件中。
在AOP中,有几个核心概念:
-
切面(Aspect):切面是横切关注点的模块化单元,它包含了横切关注点的定义和逻辑。切面可以通过配置或编程的方式定义,并指定在哪些连接点(Join Point)上应用。
-
连接点(Join Point):连接点是在应用程序中可以插入切面的特定位置,例如方法的执行、异常抛出或字段的访问等。连接点是AOP中的可执行点,切面可以通过将其与特定的连接点关联来应用到相应的位置。
-
通知(Advice):通知是切面在连接点上执行的动作。在AOP中,有几种类型的通知,包括前置通知(Before Advice)、后置通知(After Advice)、异常通知(After Throwing Advice)、返回通知(After Returning Advice)和环绕通知(Around Advice)等。
-
切点(Pointcut):切点是一组连接点的集合,它定义了在哪些连接点上应用切面。切点可以使用表达式或模式来描述连接点的选择条件,以便精确地定位需要应用切面的位置。
-
增强(Introduction):增强是在不修改原始类的情况下,为类添加新的方法或属性。通过增强,切面可以为目标对象引入新的功能。
Spring框架提供了强大的AOP支持,可以与IOC容器无缝集成。开发人员可以使用注解或XML配置来定义切面和通知,并通过在Spring容器中配置AOP代理,实现切面的自动织入。
使用AOP,开发人员可以将横切关注点独立于核心业务逻辑进行管理,提高了代码的可重用性和可维护性。同时,AOP也使得系统的关注点更加清晰,易于理解和扩展。
标签:容器,配置文件,ApplicationContext,Spring,AOP,IOC From: https://www.cnblogs.com/okup/p/17417428.html