《 Spring Boot从入门到实战(第2版·微课视频版)》 课件 第1、2章 Spring基础、Spring MVC基础_第1页
《 Spring Boot从入门到实战(第2版·微课视频版)》 课件 第1、2章 Spring基础、Spring MVC基础_第2页
《 Spring Boot从入门到实战(第2版·微课视频版)》 课件 第1、2章 Spring基础、Spring MVC基础_第3页
《 Spring Boot从入门到实战(第2版·微课视频版)》 课件 第1、2章 Spring基础、Spring MVC基础_第4页
《 Spring Boot从入门到实战(第2版·微课视频版)》 课件 第1、2章 Spring基础、Spring MVC基础_第5页
已阅读5页,还剩168页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章Spring基础学习目的与要求本章重点讲解Spring的基础知识。通过本章的学习,了解Spring的体系结构,理解SpringIoC与AOP的基本原理,了解SpringBean的生命周期、实例化以及作用域,掌握Eclipse开发Spring程序的具体步骤,掌握Spring的事务管理。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录1.1Spring概述1.2Spring开发环境的构建1.3SpringIoC1.4SpringAOP1.5SpringBean1.6Spring的数据库编程《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.1.1Spring的由来Spring是一个轻量级Java

企业级应用程序开发框架,最早由RodJohnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构,因此Java开发者可以专注于应用程序的开发。SpringFramework6.0于2022年11月正式发布,这是2023

年及以后新一代框架的开始,包含OpenJDK和Java

生态系统中当前和即将到来的创新。SpringFramework6.0作为重大更新,要求使用Java17或更高版本,并且已迁移到JakartaEE9+(在jakarta命名空间中取代了以前基于javax的API),以及对其他基础设施的修改。基于这些变化,SpringFramework6.0支持最新的Web

容器,如Tomcat10,以及最新的持久性框架HibernateORM6.1。这些特性仅可用于ServletAPI和JPA的jakarta命名空间变体。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.1.2Spring的体系结构《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.CoreContainerSpring的CoreContainer是其它模块建立的基础,由Beans(spring-beans)、Core(spring-core)、Context(spring-context)和Expression(spring-expression,Spring表达式语言)等模块组成。spring-beans模块:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean。spring-core模块:提供了框架的基本组成部分,包括控制反转(InversionofControl,IoC)和依赖注入(DependencyInjection,DI)功能。spring-context模块:建立在spring-beans和spring-core模块基础上,提供一个框架式的对象访问方式,是访问定义和配置的任何对象媒介。spring-expression模块:提供了强大的表达式语言去支持运行时查询和操作对象图。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

2.AOP和InstrumentationSpring框架中与AOP和Instrumentation相关的模块有AOP(spring-aop)模块、Aspects(spring-aspects)模块以及Instrumentation(spring-instrument)模块。spring-aop模块:提供了一个符合AOP要求的面向切面的编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以便干净地解耦。spring-aspects模块:提供了与AspectJ的集成功能,AspectJ是一个功能强大且成熟的AOP框架。spring-instrument模块:提供了类植入(Instrumentation)支持和类加载器的实现,可以在特定的应用服务器中使用。Instrumentation提供了一种虚拟机级别支持的AOP实现方式,使得开发者无需对JDK做任何升级和改动,就可以实现某些AOP的功能。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

3.MessagingSpring4.0以后新增了Messaging(spring-messaging)模块,该模块提供了对消息传递体系结构和协议的支持。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

4.DataAccess/Integration数据访问/集成层由JDBC(spring-jdbc)、ORM(spring-orm)、OXM(spring-oxm)、JMS(spring-jms)和Transactions(spring-tx)模块组成。spring-jdbc模块:提供了一个JDBC的抽象层,消除了繁琐的JDBC编码和数据库厂商特有的错误代码解析。spring-orm模块:为流行的对象关系映射(Object-RelationalMapping)API提供集成层,包括JPA和Hibernate。spring-oxm模块:提供了一个支持对象/XML映射的抽象层实现,如JAXB、Castor、JiBX和XStream。spring-jms模块(JavaMessagingService):指Java消息传递服务,包含用于生产和使用消息的功能。自Spring4.1后,提供了与spring-messaging模块的集成。spring-tx模块(事务模块):支持用于实现特殊接口和所有POJO(普通Java对象)类的编程和声明式事务管理。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

5.WebWeb层由Web(spring-web)、WebMVC(spring-webmvc)、WebSocket(spring-websocket)和WebFlux(spring-webflux)模块组成。spring-web模块:提供了基本的Web开发集成功能。例如:多文件上传功能、使用Servlet监听器初始化一个IoC容器以及Web应用上下文。spring-webmvc模块:也称为Web-Servlet模块,包含用于Web应用程序的SpringMVC和RESTWebServices实现。SpringMVC框架提供了领域模型代码和Web表单之间的清晰分离,并与SpringFramework的所有其它功能集成,本书后续章节将会详细讲解SpringMVC框架。spring-websocket模块:Spring4.0后新增的模块,它提供了WebSocket和SockJS的实现,主要是与Web前端的全双工通讯的协议。spring-webflux是一个新的非堵塞函数式ReactiveWeb框架,可以用来建立异步的、非阻塞、事件驱动的服务,并且扩展性非常好。(该模块是Spring5新增模块)《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.TestTest(spring-test)模块:支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录1.1Spring概述1.2Spring开发环境的构建1.3SpringIoC1.4SpringAOP1.5SpringBean1.6Spring的数据库编程《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.2.1使用Eclipse开发JavaWeb应用Eclipse是一个可用于开发Web应用的IDE工具。登录/ide,选择JavaEE,根据操作系统的位数,下载相应的Eclipse。本书采用的是“eclipse-jee-2022-09-M2-win32-x86_64.zip”。使用Eclipse之前,需要对JDK、Web服务器和Eclipse进行一些必要的配置。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.安装JDK可以登录Oracle官方网站/technetwork/java,根据操作系统的位数,下载相应的JDK,例如64位的系统使用64位的JDK。本书采用的JDK是jdk-18_windows-x64_bin.exe。JDK18的安装程序默认将常用的开发工具(包括java.exe、javac.exe、javaw.exe以及jshell.exe)自动复制到C:\ProgramFiles\CommonFiles\Oracle\Java\javapath目录中,并将该目录自动添加到Path环境变量中。因此,如果仅需要使用这些常用的开发工具,不再需要配置环境变量。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

2.Web服务器目前,比较常用的Web服务器包括Tomcat,JRun,Resin,WebSphere,WebLogic等,本书采用的是Tomcat10.0。登录Apache

软件基金会的官方网站http://jakarta.A/tomcat,下载Tomcat10.0的免安装版(本书采用apache-tomcat-10.0.23-windows-x64.zip)。登录网站后,首先在Download里选择Tomcat10,然后在BinaryDistributions的Core中选择相应版本即可下载。将下载的apache-tomcat-10.0.23-windows-x64.zip解压到某个目录下即可完成安装。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

3.安装EclipseEclipse下载完成后,解压到自己设置的路径下,即可完成安装。Eclipse安装后,双击Eclipse安装目录下的eclipse.exe文件,启动Eclipse。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

4.集成Tomcat启动Eclipse,选择【Window】/【Preferences】菜单项,在弹出的对话框中选择【Server】/【RuntimeEnvironments】命令。在弹出的窗口中,单击【Add】按钮,弹出如图1.6所示的【NewServerRuntimeEnvironment】界面,在此可以配置各种版本的Web服务器。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.2.2Spring的下载使用Spring框架开发应用程序时,需要引用Spring框架自身的JAR包。SpringFramework6.0.0的JAR包可以从Maven

中央库获得。Spring的JAR包中,有四个基础包:spring-core-6.0.0.jar、spring-beans-6.0.0.jar、spring-context-6.0.0.jar和spring-expression-6.0.0.jar,分别对应Spring核心容器的四个模块:Spring-core模块、Spring-beans模块、Spring-context模块和Spring-expression模块。对于Spring框架的初学者,开发Spring应用时,只需要将Spring的四个基础包和SpringCommonsLoggingBridge对应的JAR包spring-jcl-6.0.0.jar复制到Web应用的WEB-INF/lib目录下即可。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.2.3第一个Spring入门程序1.使用Eclipse创建Web应用并导入JAR包使用Eclipse创建一个名为ch1_1的DynamicWebProject应用,并将Spring的四个基础包和SpringCommonsLoggingBridge对应的JAR包spring-jcl-6.0.0.jar复制到ch1_1的WEB-INF/lib目录中,如图1.8所示。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.2.3第一个Spring入门程序2.创建接口TestDao在模块ch1_1的src/main/java目录下,创建一个dao包,并在dao包中创建接口TestDao,接口中定义一个sayHello()方法,代码如下:packagedao;publicinterfaceTestDao{ publicvoidsayHello();}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.2.3第一个Spring入门程序3. 创建接口TestDao的实现类TestDaoImplpackagedao;publicclassTestDaoImplimplementsTestDao{ @Override publicvoidsayHello(){ System.out.println("Hello,Studyhard!"); }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.2.3第一个Spring入门程序4.创建配置文件applicationContext.xml在模块ch1_1的src/main/java目录下,创建Spring的配置文件applicationContext.xml,并在该文件中使用实现类TestDaoImpl创建一个id为test的Bean,代码如下:<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd"> <!--将指定类TestDaoImpl配置给Spring,让Spring创建其实例-->

<beanid="test"class="dao.TestDaoImpl"/></beans>《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.2.3第一个Spring入门程序5.创建测试类publicclassTest{ privatestaticApplicationContextappCon; publicstaticvoidmain(String[]args){

appCon=newClassPathXmlApplicationContext("applicationContext.xml"); //从容器中获取test实例

TestDaott=appCon.getBean("test",TestDao.class);//test为配置文件中的id tt.sayHello(); }}执行上述main()方法后,将在控制台输出“Hello,Studyhard!”。上述main()方法中并没有使用new运算符创建TestDaoImpl类的对象,而是通过SpringIoC容器来获取的实现类对象,这就是SpringIoC的工作机制。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录1.1Spring概述1.2Spring开发环境的构建1.3SpringIoC1.4SpringAOP1.5SpringBean1.6Spring的数据库编程《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.3.1SpringIoC的基本概念控制反转(InversionofControl,IoC)是一个比较抽象的概念,是Spring框架的核心,用来消减计算机程序的耦合问题。依赖注入(DependencyInjection,DI)是IoC的另外一种说法,只是从不同的角度,描述相同的概念。当某个Java对象(调用者,比如您)需要调用另一个Java对象(被调用者,即被依赖对象,比如面包)时,在传统编程模式下,调用者通常会采用“new

被调用者”的代码方式来创建对象(比如您自己制作面包)。这种方式会增加调用者与被调用者之间的耦合性,不利于后期代码的升级与维护。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.3.1SpringIoC的基本概念当Spring框架出现后,对象的实例不再由调用者来创建,而是由Spring容器(比如面包店)来创建。Spring容器会负责控制程序之间的关系(比如面包店负责控制您与面包的关系),而不是由调用者的程序代码直接控制。这样,控制权由调用者转移到Spring容器,控制权发生了反转,这就是Spring的控制反转。从Spring容器角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,相当于为调用者注入它所依赖的实例,这就是Spring的依赖注入,主要目的是为了解耦,体现一种“组合”的理念。综上所述,控制反转是一种通过描述(在Spring中可以是XML或注解)并通过第三方去产生或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.3.2Spring的常用注解在Spring框架中,尽管使用XML配置文件可以很简单地装配bean,但如果应用中有大量的bean需要装配时,会导致XML配置文件过于庞大,不方便以后的升级维护。因此,更多的时候推荐开发者使用注解(annotation)的方式去装配bean。需要注意的是,基于注解的装配需要使用<context:component-scan>元素或@ComponentScan注解定义包(注解所在的包)扫描的规则,然后根据定义的规则找出哪些类(bean)需要自动装配到Spring容器中,然后交由Spring进行统一管理。Spring框架基于AOP编程(面向切面编程)实现注解解析,因此,在使用注解编程时,需要导入spring-aop-6.0.0.jar包。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.声明Bean的注解1)@Component该注解是一个泛化的概念,仅仅表示一个组件对象(bean),可以作用在任何层次上,没有明确的角色。2)@Repository该注解用于将数据访问层(DAO)的类标识为bean,即注解数据访问层bean,其功能与@Component()相同。3)@Service该注解用于标注一个业务逻辑组件类(Service层),其功能与@Component()相同。4)@Controller该注解用于标注一个控制器组件类(SpringMVC的Controller),其功能与@Component()相同。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

2.注入Bean的注解1)@Autowired该注解可以对类成员变量、方法及构造方法进行标注,完成自动装配的工作。通过@Autowired的使用来消除setter

和getter方法。默认按照bean的类型进行装配。2)@Resource该注解与@Autowired功能一样。区别在于,该注解默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入;而@Autowired默认按照bean的类型进行装配,如果想按照名称来装配注入,则需要结合@Qualifier注解一起使用。@Resource注解有两个属性:name和type。name属性指定bean实例名称,即按照名称来装配注入;type属性指定bean类型,即按照bean的类型进行装配。3)@Qualifier该注解与@Autowired注解配合使用。当@Autowired注解需要按照名称来装配注入,则需要结合该注解一起使用,bean的实例名称由@Qualifier注解的参数指定。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.3.3基于注解的依赖注入SpringIoC容器(ApplicationContext)负责创建和注入bean。Spring提供使用XML配置、注解、Java配置以及groovy配置实现bean的创建和注入。本书尽量使用注解(@Component、@Repository、@Service以及@Controller等业务bean的配置)和Java配置(全局配置如数据库、MVC等相关配置)完全代替XML配置,这也是SpringBoot推荐的配置方式。【例1-2】基于注解的依赖注入的使用过程。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.使用Eclipse创建Web应用并导入JAR包使用Eclipse创建一个名为ch1_2的DynamicWebproject,并将Spring的四个基础包、SpringCommonsLoggingBridge对应的JAR包spring-jcl-6.0.0.jar以及spring-aop-6.0.0.jar(本节扫描注解,需要事先导入SpringAOP的JAR包)复制到ch1_2的WEB-INF/lib目录中。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

2.创建DAO层在模块ch1_2的src/main/java中,创建annotation.dao包,该包下创建TestDao接口和TestDaoImpl实现类,并将实现类TestDaoImpl使用@Repository注解标注为数据访问层。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

3.创建Service层在模块ch1_2的src/main/java中,创建annotation.service包,该包下创建TestService接口和TestSeviceImpl实现类,并将实现类TestSeviceImpl使用@Service注解标注为业务逻辑层。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

4.创建Controller层在模块ch1_2的src/main/java中,创建annotation.controller包,该包下创建TestController类,并将TestController类使用@Controller注解标注为控制器层。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

5.创建配置类本书尽量不使用Spring的XML配置文件,而使用注解和Java配置。因此,在此需要使用@Configuration创建一个Java配置类(相当于一个Spring的XML配置文件),并通过@ComponentScan扫描使用注解的包(相当于在Spring的XML配置文件中使用<context:component-scanbase-package="Bean所在的包路径"/>语句)。@Configuration//声明当前类是一个配置类,相当于一个Spring的XML配置文件。@ComponentScan("annotation")//自动扫描annotation包下使用的注解,并注册为Bean。/*相当于在Spring的XML配置文件使用<context:component-scanbase-package="Bean所在的包路径"/>语句。*/publicclassConfigAnnotation{}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.创建测试类publicclassTestAnnotation{ publicstaticvoidmain(String[]args){ //初始化Spring容器ApplicationContext

AnnotationConfigApplicationContextappCon= newAnnotationConfigApplicationContext(ConfigAnnotation.class); TestControllertc=appCon.getBean(TestController.class);

tc.save(); appCon.close(); }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

7.运行结果《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.3.4Java配置Java配置是Spring4.x推荐的配置方式,它是通过@Configuration和@Bean来实现的。@Configuration声明当前类是一个配置类,相当于一个Spring配置的XML文件。@Bean注解在方法上,声明当前方法的返回值为一个Bean。【例1-3】Java配置的使用过程。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.使用Eclipse创建Web应用并导入JAR包使用Eclipse创建一个名为ch1_3的DynamicWebproject,并导入与ch1_2相同的JAR包到WEB-INF/lib目录中。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

2.创建DAO层在ch1_3应用的src/main/java中,创建dao包,该包下创建TestDao类。此类中没有使用@Repository注解为数据访问层,具体代码如下:packagedao;//此处没有使用@Repository声明BeanpublicclassTestDao{ publicvoidsave(){ System.out.println("TestDaosave"); }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

3.创建Service层在ch1_3应用的src/main/java中,创建service包,该包下创建TestService类。此类中没有使用@Service注解为业务逻辑层,具体代码如下:packageservice;importdao.TestDao;//此处没有使用@Service声明BeanpublicclassTestService{ //此处没有使用@Autowired注入testDao TestDaotestDao; publicvoidsetTestDao(TestDaotestDao){ this.testDao=testDao;

}

//……}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

4.创建Controller层在ch1_3应用的src/main/java中,创建controller包,该包下创建TestController类。此类中没有使用@Controller注解为控制器层,具体代码如下:packagecontroller;importservice.TestService;//此处没有使用@Controller声明BeanpublicclassTestController{ //此处没有使用@Autowired注入testService TestServicetestService; publicvoidsetTestService(TestServicetestService){ this.testService=testService;

}

//……}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

5.创建配置类在ch1_3应用的src/main/java中,创建javaConfig包,该包下创建JavaConfig配置类。此类中使用@Configuration注解该类为一个配置类,相当于一个Spring配置的XML文件。在配置类中使用@Bean注解定义0个或多个Bean,具体代码如下:@ConfigurationpublicclassJavaConfig{

@Bean publicTestDaogetTestDao(){ returnnewTestDao(); }

@Bean publicTestServicegetTestService(){

}

@Bean publicTestControllergetTestController(){

}}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.创建测试类在ch1_3应用的javaConfig包下,创建测试类TestConfig,具体代码如下:publicclassTestConfig{ publicstaticvoidmain(String[]args){ //初始化Spring容器ApplicationContext

AnnotationConfigApplicationContextappCon= newAnnotationConfigApplicationContext(JavaConfig.class); TestControllertc=appCon.getBean(TestController.class); tc.save(); appCon.close(); }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

7.运行结果从应用ch1_2与应用ch1_3对比可以看出,有时候使用Java配置反而更加繁琐。何时使用Java配置?何时使用注解配置?作者的观点是:全局配置尽量使用Java配置,如数据库相关的配置;业务bean的配置尽量使用注解配置,如数据访问层、业务逻辑层、控制器层等相关的配置。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录1.1Spring概述1.2Spring开发环境的构建1.3SpringIoC1.4SpringAOP1.5SpringBean1.6Spring的数据库编程《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.4SpringAOPSpringAOP是Spring框架体系结构中非常重要的功能模块之一,该模块提供了面向切面编程实现。面向切面编程在事务处理、日志记录、安全控制等操作中被广泛使用。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.4.1SpringAOP的基本概念1.AOP的概念AOP(Aspect-OrientedProgramming),即面向切面编程。它与OOP(Object-OrientedProgramming,面向对象编程)相辅相成。在OOP

中,以类作为程序的基本单元,而AOP中的基本单元是Aspect(切面)。在业务处理代码中,通常都有日志记录、性能统计、安全控制、事务处理、异常处理等操作。尽管使用OOP可以通过封装或继承的方式达到代码的重用,但仍然存在同样的代码分散到各个方法中。因此,采用OOP处理日志记录等操作,不仅增加了开发者的工作量,而且提高了升级维护的困难。为了解决此类问题,AOP思想应运而生。AOP采取横向抽取机制,即将分散在各个方法中的重复代码提取出来,然后在程序编译或运行阶段,再将这些抽取出来的代码应用到需要执行的地方。但是AOP不是OOP的替代品,而是OOP的补充,它们相辅相成。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.AOP的概念在AOP中,横向抽取机制的类与切面的关系,如右图所示。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

2.AOP的术语1)切面切面(Aspect)是指封装横切到系统功能(如事务处理)的类。2)连接点连接点(Joinpoint)是指程序运行中的一些时间点,如方法的调用或异常的抛出。3)切入点切入点(Pointcut)是指那些需要处理的连接点。在SpringAOP中,所有的方法执行都是连接点,而切入点是一个描述信息,它修饰的是连接点,通过切入点确定哪些连接点需要被处理。切面、连接点和切入点的关系如右图所示。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

2.AOP的术语4)通知(增强处理)由切面添加到特定的连接点(满足切入点规则)的一段代码,即在定义好的切入点处所要执行的程序代码。可以将其理解为切面开启后,切面的方法。因此,通知是切面的具体实现。5)引入引入(Introduction)允许在现有的实现类中添加自定义的方法和属性。6)目标对象目标对象(TargetObject)是指所有被通知的对象。如果AOP

框架使用运行时代理的方式(动态的AOP)来实现切面,那么通知对象总是一个代理对象。7)代理代理(Proxy)是通知应用到目标对象之后,被动态创建的对象。8)组入组入(Weaving)是将切面代码插入到目标对象上,从而生成代理对象的过程。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.4.2基于注解开发AspectJ在讲解AspectJ之前,先了解一下Spring的通知类型。根据Spring中通知在目标类方法的连接点位置,可以分为6种如下类型:1.环绕通知环绕通知是在目标方法执行前和执行后实施增强,可以应用于日志记录、事务处理等功能。2.前置通知前置通知是在目标方法执行前实施增强,可应用于权限管理等功能。3.后置返回通知后置返回通知是在目标方法成功执行后实施增强,可应用于关闭流、删除临时文件等功能。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.4.2基于注解开发AspectJ4.后置(最终)通知后置通知是在目标方法执行后实施增强,与后置返回通知不同的是,不管是否发生异常都要执行该通知,可应用于释放资源。5.异常通知异常通知是在方法抛出异常后实施增强,可以应用于处理异常、记录日志等功能。6.引入通知引入通知是在目标类中添加一些新的方法和属性,可以应用于修改目标类(增强类)。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.4.2基于注解开发AspectJ注解名称描

述@Aspect用于定义一个切面,注解在切面类上@Pointcut用于定义切入点表达式。在使用时,需要定义一个切入点方法。该方法是一个返回值void,且方法体为空的普通方法@Before用于定义前置通知。在使用时,通常为其指定value属性值,该值可以是已有的切入点,也可以直接定义切入点表达式@AfterReturning用于定义后置返回通知。在使用时,通常为其指定value属性值,该值可以是已有的切入点,也可以直接定义切入点表达式@Around用于定义环绕通知。在使用时,通常为其指定value属性值,该值可以是已有的切入点,也可以直接定义切入点表达式@AfterThrowing用于定义异常通知。在使用时,通常为其指定value属性值,该值可以是已有的切入点,也可以直接定义切入点表达式。另外,还有一个throwing属性用于访问目标方法抛出的异常,该属性值与异常通知方法中同名的形参一致@After用于定义后置(最终)通知。在使用时,通常为其指定value属性值,该值可以是已有的切入点,也可以直接定义切入点表达式《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.4.2基于注解开发AspectJ【例1-4】基于注解开发AspectJ的过程。1.使用Eclipse创建Web应用并导入JAR包创建一个名为ch1_4的DynamicWebProject,并将Spring的四个基础包、SpringCommonsLoggingBridge对应的JAR包spring-jcl-6.0.0.jar、spring-aop-6.0.0.jar、spring-aspects-6.0.0.jar(Spring为AspectJ提供的实现)以及AspectJ框架所提供的规范包aspectjweaver-.jar(/artifact/org.aspectj/aspectjweaver/)复制到ch1_4的WEB-INF/lib目录中。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

2.创建接口及实现类在模块ch1_4的src/main/java目录下,创建一个名为aspectj.dao的包,并在该包中创建接口TestDao和接口实现类TestDaoImpl。该实现类作为目标类,在切面类中对其方法进行增强处理。使用注解@Repository将目标类aspectj.dao.TestDaoImpl注解为目标对象。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

3.创建切面类在模块ch1_4的src/main/java目录下,创建aspectj.annotation包,在该包中创建切面类MyAspect。在该类中,首先使用@Aspect注解定义一个切面类,由于该类在Spring中是作为组件使用的,所以还需要使用@Component注解。然后,使用@Pointcut注解切入点表达式,并通过定义方法来表示切入点名称。最后在每个通知方法上添加相应的注解,并将切入点名称作为参数传递给需要执行增强的通知方法。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

4.创建配置类在模块ch1_4的src/main/java目录下,创建aspectj.config包,在该包中创建配置类AspectjAOPConfig。在该类中使用@Configuration注解声明此类为配置类;使用@ComponentScan("aspectj")注解自动扫描aspectj包下使用的注解;使用@EnableAspectJAutoProxy注解开启Spring对AspectJ的支持。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

5.创建测试类publicclassAOPTest{ publicstaticvoidmain(String[]args){ //初始化Spring容器ApplicationContext AnnotationConfigApplicationContextappCon= newAnnotationConfigApplicationContext(AspectjAOPConfig.class); //从容器中,获取增强后的目标对象

TestDaotestDaoAdvice=appCon.getBean(TestDao.class); //执行方法

testDaoAdvice.save(); System.out.println("================");

testDaoAdvice.modify(); System.out.println("================");

testDaoAdvice.delete(); appCon.close(); }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.运行测试类《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录1.1Spring概述1.2Spring开发环境的构建1.3SpringIoC1.4SpringAOP1.5SpringBean1.6Spring的数据库编程《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.5SpringBean在Spring的应用中,SpringIoC容器可以创建、装配和配置应用组件对象,这里的组件对象称为Bean。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.5.1Bean的实例化Spring框架实例化bean有三种方式:构造方法实例化、静态工厂实例化和实例工厂实例化(其中,最常用的实例方法是构造方法实例化)。使用工厂实例化具有解耦、降低代码复用等优点。【例1-5】bean的实例化过程。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.使用Eclipse创建Web应用并导入JAR包使用Eclipse创建一个名为ch1_5的DynamicWebproject,并导入与ch1_2相同的JAR包到WEB-INF/lib目录中。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

2.创建实例化bean的类在模块ch1_5的src/main/java目录下,创建包instance,并在该包中创建BeanClass、BeanInstanceFactory以及BeanStaticFactory等实例化bean的类。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

3.创建配置类在模块ch1_5的src/main/java目录下,创建包config,并在该包中创建配置类JavaConfig。在该配置类中使用@Bean定义3个Bean。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

4.创建测试类publicclassTestBean{ publicstaticvoidmain(String[]args){ //初始化Spring容器ApplicationContext AnnotationConfigApplicationContextappCon= newAnnotationConfigApplicationContext(JavaConfig.class);

BeanClassb1=(BeanClass)appCon.getBean("beanClass"); System.out.println(b1+b1.message);

BeanClassb2=(BeanClass)appCon.getBean("beanStaticFactory"); System.out.println(b2+b2.message);

BeanClassb3=(BeanClass)appCon.getBean("beanInstanceFactory"); System.out.println(b3+b3.message); appCon.close(); }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

5.运行测试类《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.5.2Bean的作用域在Spring中,不仅可以完成bean的实例化,还可以为bean指定作用域,通过@Scope注解来实现。【例1-6】bean的作用域。作用域名称描述singleton默认的作用域,使用singleton定义的Bean在Spring容器中只有一个Bean实例。prototypeSpring容器每次获取prototype定义的Bean,容器都将创建一个新的Bean实例。request在一次HTTP请求中容器将返回一个Bean实例,不同的HTTP请求返回不同的Bean实例。仅在WebSpring应用程序上下文中使用。session在一个HTTPSession中,容器将返回同一个Bean实例。仅在WebSpring应用程序上下文中使用。application为每个ServletContext对象创建一个实例,即同一个应用共享一个Bean实例。仅在WebSpring应用程序上下文中使用。websocket为每个WebSocket对象创建一个Bean实例。仅在WebSpring应用程序上下文中使用。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.使用Eclipse创建Web应用并导入JAR包使用Eclipse创建一个名为ch1_6的DynamicWebproject,并导入与ch1_5相同的JAR包到WEB-INF/lib目录中。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

2.编写不同作用域的Bean在模块ch1_6的src/main/java目录下,创建包service,并在该包中创建SingletonService和PrototypeService类。在SingletonService类中,bean的作用域为默认作用域singleton;在PrototypeService类中,bean的作用域为prototype。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

3.创建配置类在ch1_6应用的src/main/java目录下,创建包config,并在该包中创建配置类ScopeConfig,具体代码如下:@Configuration@ComponentScan("service")publicclassScopeConfig{}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

4.创建测试类publicclassTestScope{ publicstaticvoidmain(String[]args){ //初始化Spring容器ApplicationContext AnnotationConfigApplicationContextappCon= newAnnotationConfigApplicationContext(ScopeConfig.class);

SingletonServicess1=appCon.getBean(SingletonService.class); SingletonServicess2=appCon.getBean(SingletonService.class); System.out.println(ss1); System.out.println(ss2);

PrototypeServiceps1=appCon.getBean(PrototypeService.class); PrototypeServiceps2=appCon.getBean(PrototypeService.class); System.out.println(ps1); System.out.println(ps2); appCon.close(); }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

5.运行测试类《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.5.3Bean的初始化和销毁在实际工程应用中,经常需要在bean使用之前或之后做些必要的操作,Spring对bean的生命周期的操作提供了支持。可以使用@Bean注解的initMethod和destroyMethod属性对bean进行初始化和销毁。【例1-7】bean的初始化和销毁。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.使用Eclipse创建Web应用并导入JAR包使用Eclipse创建一个名为ch1_7的DynamicWebproject,并导入与ch1_6相同的JAR包到WEB-INF/lib目录中。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

2.创建Bean的类在模块ch1_7的src/main/java目录下,创建包service,并在该包中创建MyService类publicclassMyService{ publicvoidinitService(){ System.out.println(this.getClass().getName()+"执行自定义的初始化方法"); } publicMyService(){ System.out.println("执行构造方法,创建对象。"); } publicvoiddestroyService(){ System.out.println(this.getClass().getName()+"执行自定义的销毁方法"); }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

3.创建配置类@ConfigurationpublicclassJavaConfig{ //initMethod和destroyMethod指定MyService类的initService和destroyService方法

//在构造方法之后、销毁之前执行

@Bean(initMethod="initService",destroyMethod="destroyService") publicMyServicegetMyService(){ returnnewMyService(); }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

4.创建测试类publicclassTestInitAndDestroy{ publicstaticvoidmain(String[]args){ //初始化Spring容器ApplicationContext AnnotationConfigApplicationContextappCon= newAnnotationConfigApplicationContext(JavaConfig.class);

System.out.println("获得对象前"); MyServicems=appCon.getBean(MyService.class); System.out.println("获得对象后"+ms); appCon.close(); }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

5.运行测试类《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录1.1Spring概述1.2Spring开发环境的构建1.3SpringIoC1.4SpringAOP1.5SpringBean1.6Spring的数据库编程《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.6Spring的数据库编程数据库编程是互联网编程的基础,Spring框架为开发者提供了JDBC模板模式,即jdbcTemplate,它可以简化许多代码,但在实际应用中jdbcTemplate并不常用。工作更多的时候,用的是Hibernate框架和MyBatis框架进行数据库编程。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.6.1SpringJDBC的XML配置<!--配置数据源--><beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!--MySQL数据库驱动--> <propertyname="driverClassName"value="com.mysql.cj.jdbc.Driver"/> <!--连接数据库的URL--> <propertyname="url"value="jdbc:mysql://:3306/springtest?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8"/> <!--连接数据库的用户名--> <propertyname="username"value="root"/> <!--连接数据库的密码--> <propertyname="password"value="root"/></bean><!--配置JDBC模板--><beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"> <propertyname="dataSource"ref="dataSource"/></bean>《SpringBoot从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.6.2SpringJDBC的Java配置@Configuration//通过该注解来表明该类是一个Spring的配置,相当于一个xml文件@ComponentScan(basePackages="dao")//配置扫描包@PropertySource(value={"classpath:perties"},ignoreResourceNotFound=true)//配置多个属性文件时value={"classpath:perties","xx","xxx"}publicclassSpringJDBCConfig{ @Value("${jdbc.url}")//注入属性文件perties中的jdbc.urlprivateStringjdbcUrl;@Value("${jdbc.driverClassName}")privateStringjdbcDriverClassName;@Value("${jdbc.username}")privateStringjdbcUsername;@Value("${jdbc.pa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论