企业网站建设流程图,家用电器网页设计实训报告,手机网站建设案例,企业网站软件下载Spring#xff1a;
框架#xff1a; 具有一定功能的半成品软件#xff0c;基于框架会节省开发成本 框架作用#xff1a; 提高开发效率、复用性、编写规范、节约维护成本、解耦底层实现原理 Spring#xff1a;
Spring是分层的JavaSE/EE应用full-stack轻量级开源框架Sprin…Spring
框架 具有一定功能的半成品软件基于框架会节省开发成本 框架作用 提高开发效率、复用性、编写规范、节约维护成本、解耦底层实现原理 Spring
Spring是分层的JavaSE/EE应用full-stack轻量级开源框架Spring主要是做整合可以理解是一搜航空母舰上面放置了很多的战斗机Spring核心是IOC(控制反转) 和 AOP(面向切面编程)Spring提供了对各种优秀框架的支持和 整合
Spring优点
IOC解耦 可以将对象间的依赖关系交由spring管理避免硬编码造成的程序间过渡耦合 支持AOP 可以使用切面编程思想对方法进行增强 支持声明式事务 可以通过配置或者注解的方式管理事务不需要硬编码管理事务 方便测试 可以通过注解方便的测试Spring程序 方便集成 其内部提供了对各种优秀框架的直接支持 使用简单 Spring对很多难用的API做了简单的封装 设计精良 Spring的源码设计精妙、结构清晰值得学习 不使用Spring会有什么影响
会造成(常见的) 依赖问题耦合问题 实现类丢失会影响其他层 2. 实现类切换会影响其他层 创建顺序对象个数 Spring体系结构 Data Access/Integration JDBC: 对各大数据库厂商进行抽象处理ORM: 集成orm框架支持对象关系映射处理OXM: 提供了对 Object/XML映射实现的抽象层JMS: 主要包含了一些制造和消费消息的特性Transactions: 支持编程和声明式事务管理 Web Websocket: 提供了WebSocket和SocketJS的实现Servlet: 利用MVC(model-view-controller)的实现分离代码Web: 提供了基础的面向 Web 的集成特性(如: 文件上传)Portlet: 提供了Portlet环境下的MVC实现 中间层 AOP: 提供了符合AOP要求的面向切面的编程实现Aspects: 提供了与AspectJ的集成功能Instrumentation: 提供了类植入Instrumentation的支持和类加载器的实现Messaging: 用于构建基于消息的应用程序 Core Container Beans: Bean工厂与bean的装配Core: 依赖注入IoC与DI的最基本实现Content: IOC容器的企业服务扩展SpEl: 用于在运行时查询和操纵对象的表达式 Test 支持使用 JUnit 和 TestNG 对 Spring 组件进行测试 耦合内聚
耦合Coupling 代码书写过程中所使用技术的结合紧密度用于衡量软件中各个模块之间的互联程度 内聚Cohesion 代码书写过程中单个模块内部各组成部分间的联系用于衡量软件中各个模块内部的功能联系 程序书写的目标高内聚、低耦合就是同一个模块内的各个元素之间要高度紧密但是各个模块之间的相互依存度不要那么紧密 配置文件耦合不是java类耦合解决耦合问题
IOC容器
IoCInversion Of Control控制反转Spring反向控制应用程序所需要使用的外部资源转交给第三方(工厂)完成Spring控制的资源全部放置在Spring容器中该容器称为IoC容器Ioc就是从自己new对象变成spring给你对象都放在ioc容器里
IOC的作用 解耦: 利用IOC的工厂模式解耦创建对象的过程 解决代码耦合度过高问题 存储对象: 可以将创建好的对象 存储 起来重复使用 解决对象个数问题 管理依赖关系: 可以将依赖对象注入需要的对象当中 解决依赖关系问题 管理对象创建顺序: 可以根据依赖关系先后创建对象 解决创建顺序问题 入门案例
导入spring坐标5.1.9.release dependencies !-- https://mvnrepository.com/artifact/org.springframework/spring-context --dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.3.5/version/dependency/dependencies编写业务层与表现层模拟接口与实现类
public interface UserService {public void save();
}public class UserServiceImpl implements UserService {Overridepublic void save() {System.out.println(UserService执行);}建立spring配置文件,配置所需资源Service为spring控制的资源
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd!--创建spring控制资源 id随便写class写实现类--bean iduserService classcom.itzhuzhu.service.impl.UserServiceImpl/
/beans测试
public class UserServiceTest {Testpublic void save() {// 加载配置文件ClassPathXmlApplicationContext ctx new ClassPathXmlApplicationContext(applicationContext.xml);// 获取资源UserService userService (UserService) ctx.getBean(userService);userService.save();}
}IoC配置XML格式
bean
名称bean类型标签归属beans标签作用定义spring中的资源受此标签定义的资源将受到spring控制
属性说明id对象的引用名称;一定要唯一 一次只能定义一个引用名称通过id值获取beanname对象的引用名称; 与id区别是name一次可以定义多个引用名称。classbean的类型类的全限定名称init-method指定类中初始化方法的名称在构造方法执行完毕后立即执行destroy-method指定类中销毁方法名称在销毁spring容器前执行lazy-init设置为true表示在第一次使用对象的时候才创建只对单例对象有效。scope设置bean的作用范围, 取值singleton单例, 默认值; prototype多例 requestweb项目中将对象存入request域中sessionweb项目中将对象存入session域中globalsessionweb项目中将对象应用于集群环境没有集群相当于session
格式
beansbean /
/beans基本属性
!-- idbean的名称通过id值获取beanclassbean的类型namebean的名称可以通过name值获取bean用于多人配合时给bean起别名可以定义多个用逗号隔开测试类写哪个都可以获取
--bean iduserService nameuserService2,userService3 classcom.itzhuzhu.service.impl.UserServiceImpl/BeanFactory是Spring容器的顶层接口, 采用 延迟创建 对象的思想ApplicationContext是BeanFactory的子接口, 采用 即时创建 对象的思想
bean属性scope 名称scope 类型属性 归属bean标签 作用定义bean的作用范围 格式
!--scope: 设置对象的作用范围singleton: 默认值, 表示为单例模式: 对象只创建一次prototype: 多例模式, 标识对象每次使用都创建一个新的 (并且不会将对象存储到IOC容器中)--bean init-methodinit destroy-methoddestroy scopeprototype classcom.itzhuzhu.service.impl.UserServiceImpl/Testpublic void save2() {// 加载配置文件ApplicationContext context new ClassPathXmlApplicationContext(applicationContext.xml);// 获取资源UserService userService (UserService) context.getBean(userService);UserService userService2 (UserService) context.getBean(userService);System.out.println(userService);System.out.println(userService2);System.out.println(userService userService2);/* singleton打印结果com.itzhzhu.service.impl.UserServiceImpl3f6f6701com.itzhzhu.service.impl.UserServiceImpl3f6f6701trueprototype打印结果com.itzhzhu.service.impl.UserServiceImpl52b1beb6com.itzhzhu.service.impl.UserServiceImpl273e7444false
*/}取值
singleton(默认配置)设定创建出的对象保存在spring容器中是一个单例的对象地址值都一样的加载spring容器的时候就会初始化prototype设定创建出的对象保存在spring容器中是一个非单例的对象加载容器不初始化获取的对象时候创建用一个创建一个request、session、application、 websocket 设定创建出的对象放置在web容器对应的位置
bean生命周期 名称init-methoddestroy-method 类型属性 归属bean标签 作用定义bean对象在初始化或销毁时完成的工作 格式
bean init-methodinit destroy-methoddestroy/bean取值bean对应的类中对应的具体方法名
注意事项 当scope“singleton”时spring容器中有且仅有一个对象init方法在创建容器时仅执行一次 当scope“prototype”时spring容器要创建同一类型的多个对象init方法在每个对象创建时均执行一次 当scope“singleton”时关闭容器会导致bean实例的销毁调用destroy方法一次 当scope“prototype”时对象的销毁由垃圾回收机制gc()控制destroy方法将不会被执行
bean对象创建方式
factory-bean
如果项目之前没有使用Spring会用到这种方式 名称factory-bean 类型属性 归属bean标签 作用定义bean对象创建方式使用静态工厂的形式创建bean兼容早期遗留系统的升级工作 格式
bean classFactoryClassName factory-methodfactoryMethodName/bean取值工厂bean中用于获取对象的静态方法名
注意事项
class属性必须配置成静态工厂的类名
factory-beanfactory-method 名称factory-beanfactory-method 类型属性 归属bean标签 作用定义bean对象创建方式使用实例工厂的形式创建bean兼容早期遗留系统的升级工作 格式
!--实例工厂对应的bean--
bean idfactoryBeanId class类路径/
!--实例工厂创建bean。依赖工厂对象对应的bean factory-bean写上面的idmethod写对应的方法名--
bean id起名 factory-bean对应上面的bean id factory-methodfactoryMethodName/取值工厂bean中用于获取对象的实例方法名
注意事项 使用实例工厂创建bean首先需要将实例工厂配置bean交由spring进行管理 factory-bean是实例工厂的beanId