核工业华南建设集团网站,上海到北京多少公里,html入门网页制作,网上商城怎样推广一、Spring概述1.1 Spring是什么Spring是一个分层的Java SE/EE full-stack#xff08;一站式,指的是它能够为Java应用提供从表现层#xff08;前端#xff09;到持久层#xff08;数据库#xff09;的完整解决方案#xff09;轻量级开源框架#xff0c;以 IOC#xff0…一、Spring概述1.1 Spring是什么Spring是一个分层的Java SE/EE full-stack一站式,指的是它能够为Java应用提供从表现层前端到持久层数据库的完整解决方案轻量级开源框架以 IOCInverse Of Control反转控制和 AOPAspect Oriented Programming面向切面编程为核心。在Java三层架构当中分别提供了相应技术表现层web层 SpringMVC 框架业务层service层 Bean管理IOC容器声明式事务持久层dao层 JdbcTemplate模板对象以及提供了ORM模块整合其他优秀的持久层技术Spring每一层都可能存在(Bean就是对象)1.2 Spring框架发展历程1997 年 IBM提出了EJB 的思想1998 年SUN制定开发标准规范 EJB1.01999 年EJB1.1 发布2001 年EJB2.0 发布2003 年EJB2.1 发布2006 年EJB3.0 发布Rod Johnson Spring 之父 Expert One-to-One J2EE Design and Development(2002) 阐述了 J2EE 使用EJB 开发设计的优点及解决方案 Expert One-to-One J2EE Development without EJB(2004) 阐述了 J2EE 开发不使用 EJB的解决方式Spring 雏形2017 年 9 月份发布了 Spring 的最新版本 Spring5.0 通用版1.3 Spring框架的优势(面试题)方便解耦简化开发:Spring 就是一个大工厂可以管理所有对象的创建和依赖关系维护交给Spring管理AOP 编程的支持可以方便的实现对程序进行权限拦截日志记录运行的监控声明式事务的支持通过配置方式完成对事务的管理无需手动编程方便程序的测试对Junit支持可以通过注解方便的对Spring程序进行测试整合外部优秀技术 Spring内部提供了对各种优秀框架HibernateMybatisQuartz等的直接支持1.4 Spring的体系结构Spring(http://c.biancheng.net/spring/) 框架采用分层架构根据不同的功能被划分成了多个模块这些模块大体可分为:1. Data Access/Integration数据访问集成Spring-jdbc模块提供了一个JDBC的抽象层消除了烦琐的JDBC编码和数据库厂商特有的错误代码解析。Spring-orm模块为流行的对象关系映射Object-Relational MappingAPI提供集成层包括JPA和Hibernate。使用Spring-orm模块可以将这些O/R映射框架与Spring提供的所有其他功能结合使用例如声明式事务管理功能。Spring-oxm模块提供了一个支持对象/XML映射的抽象层实现例如JAXB、Castor、JiBX和XStream。Spring-jms模块Java Messaging Service指Java消息传递服务包含用于生产和使用消息的功能。自Spring4.1以后提供了与Spring-messaging模块的集成。Spring-tx模块事务模块支持用于实现特殊接口和所有POJO普通Java对象类的编程和声明式事务管理。2. web模块Spring-web模块提供了基本的Web开发集成功能例如多文件上传功能、使用Servlet监听器初始化一个IOC容器以及Web应用上下文。Spring-webmvc模块也称为Web-Servlet模块包含用于web应用程序的Spring MVC和REST Web Services实现。Spring MVC框架提供了领域模型代码和Web表单之间的清晰分离并与Spring Framework的所有其他功能集成。Spring-websocket模块Spring4.0以后新增的模块它提供了WebSocket和SocketJS的实现。Portlet模块类似于Servlet模块的功能提供了Portlet环境下的MVC实现。3. aop模块Spring-aop模块提供了一个符合AOP要求的面向切面的编程实现可以定义将要应用于业务逻辑的切面允许定义方法拦截器和切入点将代码按照功能进行分离以便干净地解耦。4. Core Container核心容器 和 Test测试Spring-core模块提供了框架的基本组成部分包括控制反转Inversion of ControlIOC和依赖注入Dependency InjectionDI功能。Spring-beans模块提供了BeanFactory是工厂模式的一个经典实现Spring将管理对象称为Bean。Spring-context模块建立在Core和Beans模块的基础之上提供一个框架式的对象访问方式是访问定义和配置的任何对象的媒介。ApplicationContext接口是Context模块的焦点。Spring-context-support模块支持整合第三方库到Spring应用程序上下文特别是用于高速缓存EhCache、JCache和任务调度CommonJ、Quartz的支持。Spring-expression模块提供了强大的表达式语言去支持运行时查询和操作对象图。这是对JSP2.1规范中规定的统一表达式语言Unified EL的扩展。该语言支持设置和获取属性值、属性分配、方法调用、访问数组、集合和索引器的内容、逻辑和算术运算、变量命名以及从Spring的IOC容器中以名称检索对象。它还支持列表投影、选择以及常用的列表聚合。Spring-test模块支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。虽然 Spring 框架本身是一个非常强大的工具集但它通常需要较多的配置工作。为了简化配置并快速启动项目Spring Boot 被开发出来。Spring Boot 提供了一种快速配置 Spring 应用的方式通过自动配置和起步依赖Starters来简化项目的设置过程。二、SpringIOC 机制的详解2.1 IOC概述及作用2.1.1 IOC的简介设计思想SpringIOCIOC 是 Inversion of Control 的缩写多数书籍翻译成“控制反转”还有些书籍翻译成为“控制反向”或者“控制倒置”。简单的说就是之前创建对象需要我们手动创建现在有了IOC就可以对象和对象之前的依赖关系交给IOC容器来维护IOC 理论提出的观点大体是这样的借助于“第三方”实现具有依赖关系的对象之间的解耦IOC容器成了整个系统的关键核心它起到了一种类似“粘合剂”的作用总结IOC是个容器创建对象可以去维护类和类直接的关系2.1.2 IOC作用IOC本质上就是一个大工程大容器。主要作用就是存储和管理对象的依赖关系削减计算机程序的耦合解除我们代码中的依赖关系提高程序的可扩展性和可维护性。2.2 Spring快速入门2.2.1 程序开发步骤以前的开发步骤:现在使用Spring后的开发步骤:开发步骤:(1). 构建工程并导入 Spring 开发的依赖坐标(在pom.xml文件中)(2). 创建 User 实体类(3). 创建 Spring 核心配置文件(4). 在核心配置文件中声明 bean 标签指定要创建的对象(5). 加载 spring 核心配置文件(6). 从容器中获取对象2.2.2 构建工程并导入依赖坐标?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.sy/groupId artifactIdday07_spring/artifactId version1.0-SNAPSHOT/version properties maven.compiler.source11/maven.compiler.source maven.compiler.target11/maven.compiler.target project.build.sourceEncodingUTF-8/project.build.sourceEncoding !--Spring统一版本管理-- spring.version5.2.5.RELEASE/spring.version /properties dependencies !--导入spring的context坐标context依赖core、beans、expression-- dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId version${spring.version}/version /dependency !--log4j打印日志-- dependency groupIdlog4j/groupId artifactIdlog4j/artifactId version1.2.17/version /dependency !--junit依赖-- dependency groupIdjunit/groupId artifactIdjunit/artifactId version4.12/version /dependency /dependencies /project2.2.3 创建User类package com.sy.pojo; public class User { private Integer id; private String name; private Integer age; public User() { System.out.println(无参构造方法执行了...); } public User(Integer id, String name, Integer age) { this.id id; this.name name; this.age age; } public Integer getId() { return id; } public void setId(Integer id) { this.id id; } public String getName() { return name; } public void setName(String name) { this.name name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age age; } Override public String toString() { return User{ id id , name name \ , age age }; } }2.2.4 创建Spring核心配置文件(在类路径下resources创建applicationContext.xml配置文件)2.2.5 在Spring配置文件中配置User类2.2.6 使用 Spring 的 API 获得 Bean 实例结果展示:总结(1). 加入spring的依赖(2). 创建spring核心配置文件(3). 在核心配置文件中声明bean标签指定要创建的对象(4). 加载spring核心配置文件(5). 从容器中获取对象三、Spring管理Bean细节3.1 Bean实例化方式Spring的bean实例化的方式主要说明了获取对象并放入ioc容器的方式Bean标签:用于配置对象交由Spring 来创建。默认情况下它调用的是类中的无参构造函数如果没有无参构造函数则不能创建成功。基本属性:idBean实例在Spring容器中的唯一标识(通过id获取对应的对象, 既然是唯一的标识, 在配置文件内部这个id是不允许重复的)classBean的全限定名称Bean实例化三种方式:(面试题)(1). 无参构造方法实例化(2). 工厂静态方法实例化(3). 工厂实例方法实例化3.1.1 构造方法的方式它会根据默认无参构造函数来创建类对象。如果 bean 中没有默认无参构造函数将会创建失败创建User对象:测试程序:结果展示:3.1.2 静态工厂方式静态工厂工厂中所有的方法都是静态方法。1. 创建静态工厂对象:2. 配置Spring容器管理User类型对象在applicationContext.xml中配置:3. 测试程序结果展示:3.1.3 实例工厂方式1. 创建非静态工厂对象2. 配置Spring容器管理User类型对象在applicationContext.xml中配置:3. 测试程序结果展示:3.2 获取容器中所有的id值3.3 Bean的作用域(面试题)3.3.1 Bean作用域介绍所谓Bean的作用域其实就是指Spring给我们创建出的对象的存活范围在配置文件中通过bean的scope属性指定scope:指对象的作用范围常用的取值如下取值范围说明singleton默认值单例的一个应用只有一个对象的实例。它的作用范围就是整个应用。创建容器时对象就被创建了。只要容器在对象一直活着。销毁容器时对象就被销毁。prototype多例的当使用对象的时候创建新的对象实例。只要对象在使用中就一直活着。当对象长时间不用时被java的垃圾回收器回收了。3.3.2 Bean作用域的解析当scope的取值为singleton时Bean的实例化个数1个Bean的实例化时机当Spring核心文件被加载时实例化配置的Bean实例演示单例效果:当scope的取值为prototype时Bean的实例化个数多个Bean的实例化时机当调用getBean()方法时实例化Bean演示多例效果:总结:1. 当scope的取值为singleton时Bean的实例化个数1个Bean的实例化时机当Spring核心文件被加载时实例化配置的Bean实例Bean的生命周期对象创建当应用加载创建容器时对象就被创建了对象运行只要容器在对象一直活着对象销毁当应用卸载销毁容器时对象就被销毁了(容器销毁, 对象就销毁)2. 当scope的取值为prototype时Bean的实例化个数多个Bean的实例化时机当调用getBean()方法时实例化BeanBean的生命周期对象创建当使用对象时创建新的对象实例对象运行只要对象在使用中就一直活着(这多个对象也不会一直在容器中存活)对象销毁当对象长时间不用时被 Java 的垃圾回收器回收了(会GC被回收)3.4 Bean的生命周期Bean的生命周期:init-method指定类中的初始化方法名称destroy-method指定类中销毁方法名称演示Bean的生命周期效果: