《Java轻量级框架技术与应用》 课件 项目一 Spring入门_第1页
《Java轻量级框架技术与应用》 课件 项目一 Spring入门_第2页
《Java轻量级框架技术与应用》 课件 项目一 Spring入门_第3页
《Java轻量级框架技术与应用》 课件 项目一 Spring入门_第4页
《Java轻量级框架技术与应用》 课件 项目一 Spring入门_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

项目一初识Spring认识Spring目录Content1Spring依赖注入2需求的不断变化项目导言零面临新的挑战最主流开发框架Spring入门学习目标零知识目标了解Spring的优点;熟悉Spring的下载安装与结构目录;熟悉Spring的控制反转与bean的注入方式;了解Spring中AOP的概念;熟悉Spring中AOP的使用方法。能力目标具备Spring相关依赖的下载的能力;具备创建Spring项目的能力;具备使用Spring中bean注入方式的能力;具备使用Spring进行面向切面编程的能力;具备基于XML配置方式的能力。素质目标具备精益求精、坚持不懈的精神;具有独立解决问题的能力;具备灵活的思维和处理分析问题的能力;具有责任心。任务1:认识Spring壹Spring概述任务技能Spring是开源应用程序框架。Spring的依赖注入容器、AOP实现和对持久化层的支持。来解决企业应用程序开发复杂性。Spring加载方式Spring的依赖管理,使用Maven或者Gradle等构建工具来管理依赖关系。管理Spring的依赖关系使用定位并下载大量的jar包来使用Spring。对于基本的依赖注入那只需要一个必须的外部依赖--日志任务1-1:Spring概述壹1什么是SpringSpring是一款流行的开源应用程序框架,可以帮助开发者构建高效的企业级应用程序。Spring框架的核心是IoC(inversionofcontrol)和AOP(aspect-orientedprogramming)容器,IOC-控制反转避免对象之间的耦合避免应用程序依赖于容器的功能AOP-面向切片编程它们可以帮助开发者实现松散耦合和面向切面的编程,从而使得应用程序更加易于测试和维护。Spring是一个全面的解决方案。但它坚持一个原则:不重新造轮子。任务1-1:Spring概述壹2Spring模块下图描述了SpringFramework包含的内容。组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。任务1-1:Spring概述壹3Spring的优点提供了一个一致的编程模型。旨在促进代码重用。旨在促进面向对象的设计。致力于推动好的编程习惯,如用接口编程。Spring改进了从Java代码中提取配置值到XML或者属性文件中的方法。32145任务1-1:Spring概述壹在项目中引入Spring可以带来的好处如下所示:降低组件之间的耦合度,实现软件各层之间的解耦。可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当使用容器管理事务时,开发人员就不再需要手工控制事务。也不需处理复杂的事务传播。容器提供单例模式支持,开发人员不再需要自己编写实现代码。容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。容器提供的众多辅助类,使用这些类能够加快应用的开发,如:JdbcTemplate、HibernateTemplate。Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,这样更便于应用的开发。321456任务1-2:Spring加载方式壹Spring的依赖管理,可以帮助我们更好地管理应用程序中的依赖关系。

在Spring中,可以使用Maven或者Gradle等构建工具来管理依赖关系。如果使用Spring,需要获得Spring的jar包,其中要包括需要使用的Spring的模块。在社区下载点/downloads/community。Maven的中央库,也是Maven默认检索的资源库企业级资源库(EnterpriseBundleRepository,EBR),同时也提供了和Spring整合的所有类库。在AmazonS3为开发和里程碑版本发布(最终发布的版本这里也会有)而设置的公共Maven资源库。任务1-3:管理Spring的依赖关系壹对于基本的依赖注入那只需要一个必须的外部依赖,就是日志。如果使用的是Maven,可以在pom.xml文件中添加以下内容来管理Spring的依赖关系,代码如下所示。<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.10</version></dependency></dependencies>如果您使用的是Gradle,可以在build.gradle文件中添加以下内容来管理Spring的依赖关系:dependencies{implementation'org.springframework:spring-context:5.3.10'}任务2:Spring依赖注入贰Spring控制反转任务技能Spring是一个开源的控制反转(InversionofControl,IoC)和面向切面(AOP)的容器框架。它的主要目的是简化企业开发。bean注入方式依赖注入的作用就是在使用Spring框架创建对象时,动态的将其所依赖的对象注入到Bean组件中,bean作用域Bean的作用域定义了Bean在我们使用它的上下文中的生命周期和可见性。任务2-1:Spring控制反转贰

Spring是一个开源的控制反转(InversionofControl,IoC)和面向切面(AOP)的容器框架。它的主要目的是简化企业开发。0102IOC01控制反转模式(也称作依赖性介入)表示不创建对象,但是描述创建它们的方式。IOC容器02Spring的一个核心特性是IOC。,它的基本思想是将对象的创建、管理和依赖关系的处理从业务逻辑中分离出来,交由IOC容器来完成。任务2-2:bean注入方式贰

依赖注入(DependencyInject,缩写DI)就是由IoC容器在运行期间动态地将某种依赖资源注入对象之中。在Spring中,依赖注入的作用就是在使用Spring框架创建对象时,动态的将其所依赖的对象注入到Bean组件中。有三种主要的Bean注入方式:0102构造函数注入Setter方法注入字段注入任务2-2:bean注入方式贰

通过构造函数注入,需要在Bean定义时指定Bean所需的依赖关系。SpringIOC容器会在创建Bean时自动调用对应的构造函数,并将所需的依赖关系作为参数传递进去。示例代码如下:0102publicclassExampleBean{privatefinalDependencydependency;publicExampleBean(Dependencydependency){this.dependency=dependency;}}<beanid="exampleBean"class="com.example.ExampleBean"><constructor-argref="dependency"/></bean>1构造函数注入任务2-2:bean注入方式贰

通过Setter方法注入,需要在Bean定义中指定Bean所需的依赖关系,并且为Bean定义对应的Setter方法。SpringIOC容器会在创建Bean后,自动调用Bean的Setter方法,并将所需的依赖关系作为方法参数传递进去。示例代码如下:0102publicclassExampleBean{privateDependencydependency;publicvoidsetDependency(Dependencydependency){this.dependency=dependency;}}<beanid="exampleBean"class="com.example.ExampleBean"><propertyname="dependency"ref="dependency"/></bean>2Setter方法注入任务2-2:bean注入方式贰

通过字段注入,需要在Bean定义中指定Bean所需的依赖关系,并将依赖关系标记为@Autowired或@Resource等注解。SpringIOC容器会自动扫描Bean中所有需要注入的字段,并将所需的依赖关系自动注入进去。示例代码如下:publicclassExampleBean{@AutowiredprivateDependencydependency;}<beanid="exampleBean"class="com.example.ExampleBean"></bean>3字段注入任务2-3:bean作用域贰bean作用域概述Bean的作用域定义了Bean在我们使用它的上下文中的生命周期和可见性。Spring框架的最新版本定义了6种作用域:singleton、prototype、request、session、application和websocket。其中,后四种作用域仅在Web感知应用程序中可用 。任务2-3:bean作用域贰Singleton作用域和Prototype作用域是Spring框架中两种常用的Bean作用域。Singleton作用域

每次通过getBean()方法获取该实例时,都返回同一个实例。适用于那些需要在整个应用程序中共享的对象,例如数据库连接池、线程池等。可能存在线程安全的问题,需要注意并发访问的情况。Prototype作用域

每次通过getBean()方法获取该实例时,都返回一个新的实例。适用于那些需要在每次请求时都重新初始化的对象,例如请求参数封装类、临时计算结果等。每次获取实例时都会创建新的对象,不会存在线程安全的问题。任务2-3:bean作用域贰【示例】演示Singleton作用域和Prototype作用域首先,创建一个名为SingletonBean的类,使用@Component注解将其标记为一个组件,并将作用域设置为Singleton。@Component@Scope("singleton")publicclassSingletonBean{privateintcount=0;publicvoidincrement(){count++;}publicvoidshowMessage(){System.out.println("SingletonBean:Count="+count);}}任务2-3:bean作用域贰然后,创建一个名为PrototypeBean的类,使用@Component注解将其标记为一个组件,并将作用域设置为Prototype。@Component@Scope("prototype")publicclassPrototypeBean{privateintcount=0;publicvoidincrement(){count++;}publicvoidshowMessage(){System.out.println("PrototypeBean:Count="+count);}}任务2-3:bean作用域贰接下来,创建一个名为Main的类,使用@Autowired注解将SingletonBean和PrototypeBean注入进来,并进行测试。@ComponentpublicclassMain{@AutowiredprivateSingletonBeansingletonBean;@AutowiredprivatePrototypeBeanprototypeBean;publicvoidrun(){//SingletonBeansingletonBean.increment();singletonBean.showMessage();

//PrototypeBeanprototypeBean.increment();prototypeBean.showMessage();

//PrototypeBeanprototypeBean.increment();prototypeBean.showMessage();//SingletonBeansingletonBean.increment();singletonBean.showMessage();}}任务2-3:bean作用域贰最后,在应用程序的入口处,创建一个ApplicationContext对象,并使用getBean()方法获取Main实例,然后调用run()方法。publicclassApplication{publicstaticvoidmain(String[]args){ApplicationContextcontext=newAnnotationConfigApplicationContext(AppConfig.class);Mainmain=context.getBean(Main.class);main.run();}}

任务2-3:bean作用域贰运行应用程序,输出结果如图可以看到,SingletonBean是一个单例,每次调用increment()方法后,count的值会被保留下来。而PrototypeBean是一个原型,每次调用increment()方法后,count的值会被重新初始化。任务3:Spring中的AOP叁AOP简介任务技能AOP模块提供了一个符合AOP联盟标准的面向切面编程的实现。AOP中的概念AOP中涉及很多术语,如切面、连接点、切入点、通知、目标对象、织入、引入等使用Spring进行面向切面编程要进行AOP编程,首先我们要在Spring的配置文件中引入aop命名空间。任务3-1:AOP简介叁为什么需要AOP?人脑的“内存”也是有限的,如果把所有相关联的事情像煮腊八粥一样一股脑放在一块儿,别说找出解决方案了,不会被逼疯的就是高人!通过依赖注入,在编写程序的时候,我们不用关心依赖的组件是怎么实现的了。任务3-1:AOP简介叁先来看下面的程序代码:publicvoiddoSomeBusiness(longlParam,StringsParam){ //记录日志 ("调用doSomeBusiness方法,参数是:"+lParam); //参数合法性验证 if(lParam<=0){ thrownewIllegalArgumentException("xx应该大于0"); } if(sParam==null||sParam.trim().equals("")){ thrownewIllegalArgumentException("xx不能为空"); } //异常处理 try{ //真正的业务逻辑代码在这里... //事务控制 mit(); }catch(Exceptione){ //... tx.rollback(); }}1任务3-1:AOP简介叁如果需要修改系统日志的格式,或者安全验证的策略,为了保证系统可用,就要在每个业务方法里都反反复复地编写这些代码吗?考虑复杂的业务已经让人头大了,再处理这些方方面面的事情,写出来的代码既难读,质量又没保障。我们怎样才能专心在真正的业务逻辑上呢?这正是AOP要解决的问题!2什么是AOPAOP是Aspect-OrientedProgrmming的简称,意思是面向方面编程。在业务系统中,总有一些散落、渗透到系统各处而且不得不处理的事情,比如安全验证。需要在页面上判断用户是否登录、当前登录用户是否有权限访问该页面,在Action代码里还要限制用户是否通过直接在URL输入路径中绕过了页面的权限控制代码,甚至在业务层代码里,还要限制不同用户访问的不同数据。任务3-1:AOP简介叁与此类似,日志、事务、安全验证等这些通用的、散布在系统各处的需要,以及在实现业务系统时关注的事情就称为“方面”,也称为“关注点”,如图所示。如果能把这些“方面”集中处理,那样既能减少“方面”代码里的错误,又能保证我们在编写业务逻辑代码时专心做事,“方面”处理策略发生改变时还能统一做出修改,这就是AOP要做的事情。从系统中分离出方面,然后集中实现。从而可以独立编写业务逻辑代码和方面代码,在系统运行的时候,再将方面代码“织入”到系统中。任务3-1:AOP简介叁3如何使用AOP切点是程序执行过程中的一个特定点,例如方法调用、异常处理或变量赋值等。在AOP中,切点用于确定何时应用横切关注点。定义切点横切关注点是一组操作,它们可以应用于切点定义的方法、类或其他程序元素。横切关注点通常包括日志记录、安全性检查、性能测量等。定义横切关注点通知是在代理对象上定义的一组横切关注点的逻辑实现。通知可以是一个方法调用,也可以是一个切面。应用通知代理对象是应用程序的一部分,它代表了被横切关注点影响的程序元素。在AOP中,代理对象通常是通过使用JDK动态代理或CGLIB生成的。配置代理对象任务3-1:AOP简介叁使用SpringAOP来记录日志示例代码如下所示。//定义切点@Pointcut("execution(*com.example.service.*.*(..))")publicvoidserviceMethod(){}//定义横切关注点@Before("serviceMethod()")publicvoidlogRequest(){//记录请求信息}//在Spring配置文件中启用AOP<aop:aspectj-autoproxy/>//在需要进行日志记录的服务方法中调用logRequest()方法即可publicvoiddoSomething(){//...logRequest();}任务3-2:AOP中的概念叁对AOP的常用术语Aspect(切面)切面指横切性关注点的抽象JoinPoint(连接点)指那些被拦截到的点Pointcut(切入点)是指我们要对哪些连接点进行拦截的定义Advice(通知)指拦截到连接点之后所要做的事情Target(目标对象)代理的目标对象Weave(织入)将切面应用到目标对象的过程Introduction(引入)可为目标对象添加一些属性和方法任务3-3:使用Spring进行面向切面编程叁要进行AOP编程,首先我们要在Spring的配置文件中引入aop命名空间,示例配置文件代码如下所示:<bea

温馨提示

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

评论

0/150

提交评论