Spring入门篇总结:
本文是对慕课网上"搞定SSM开发"路径的系列课程的总结,详细的项目文档和课程总结放在github上了.点击查看
视频传送门:Spring入门篇
该门课程主要从Spring的Bean的装配和AOP的简单使用这两个方面,结合简单的项目实例介绍了Spring起步的相关知识。
1 Spring是什么
1.1 spring的概念和特性:
关键字:Spring:开源框架,控制反转(IOC)和面向切面(AOP)
Spring是一个开源框架,主要是为了解决项目开发中的紧耦合的问题,采用了控制反转和AOP技术简化了企业级应用的开发,让开发者能够更专注于业务的开发,减少了流程式的代码,简化了开发过程,所以受到开发人员的欢迎。
控制反转:
在java开发中,如果要使用另外一个类的定义的功能,譬如在A类中需要调用B类的方法,那么一般的做法就是在A类中实例化一个B的对象,通过A.b.method()这样的方式来调用,那么这样造成了什么后果呢?那就是A强烈的依赖于B,这个时候就要求B中方法保持稳定,不能随意变动。这个时候B中的代码就被A给“限制”了,如果这个时候你要修改B中的方法,譬如将method()改为methodA(),那么同时也就要修改A中的代码以适应这个改变,这样的程序改动起来很大,也就是说扩展性很低。
控制反转就是为了解决这类问题所提出来的一种概念,主要就是通过一个容器来管理对象之间的依赖关系,Spring就提供了这样的一个容器来管理对象之间的依赖。就以上面的场景来说,A需要用到B中的功能,A只需要向容器提出我需要包含**功能的对象,容器就能给你一个这样的对象,至于这个对象到底是不是B?你管那么多呢?只要能用就行对吧。
Spring中提供的这样的容器就是我们经常提到的ApplicationContext。
面向切面:
在开发中,经常会遇到相同的模块,例如打印日志,安全管理这样的功能,可能每一个类都会有这样的需要。譬如我要记录每一个类的调用记录,使用参数等信息,这种功能k可以在每个类中加入相似的代码,直接打印出来就好。但是这种方法将辅助性的功能放到实际业务里去实现了,使每个方法承担的使命太多,如果能狗自动打印日志,不是更好吗?而这种通用的功能就称之为一个切面,面向切面的编程能够简化开发的实际代码,更好的关注于业务本身。
1.2 Spring的功能
IOC容器
AOP
集成其他的工具
2 Bean的装配
面向接口编程: 我对接口的理解实际上式接口就是一种规范,他定义了实现接口的类必须要实现的功能,因为java语言的多态性,在调用接口的地方也能使用实现了该接口的类来使用,能极大提高java语言的灵活性,而面向接口编程能更加方便地扩展整个代码。
2.1 基于xml的配置
1:xsd文件的引入:
xsd文件用于定义xml中关键字的解析,需要用到哪些模块就引入哪些模块
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
2:bean定义
<bean id="" class="">
2:注入方式(ref表示bean引用,为bean的id|value表示注入值)
构造器注入<constructor-arg ref=""/>或者<constructor-arg value=""/>
set方法注入<property ref=""/>或者~
3:作用域(bean):
单例:IOC容器只托管唯一的实例
session:每次http请求创建,当前session内有效
request;每次http请求创建一个实例,但前request内有效
原型:每次请求bean时都会实例化一个实例
单例和原型用的比较多。spring默认为单例。
在bean的定义中通过scope属性来指定
4:生命周期
定义
初始化
使用
销毁
我们可以在定义和销毁时增加自己需要的操作:可以实现接口或者在xml中定义,见下表:
| 实例类型 | 实现接口 | xml配置 |
|---|---|---|
| 初始化 | InitializingBean实现afterPropertiesSet方法 | init-method |
| 销毁 | DiposableBean实现destroy方法 | destroy-method |
5:自动装配
NO
byName 根据bean的名字
byType 根据bean的类型那个
Constructor 类似byType
6:定义resource文件
通过classPath方式或者filePath方式比较常见
2.2 基于注解方式配置
1:定义需要扫描的位置
<context:component-scan base-package=""/>
2:定义Bean
@Component,@Repository,@Service,@Controller,@Bean;根据beanNameGenerator来定义bean的名称
3:装配
@Autowired,@Inject等
3 AOP
3.1 基本概念
- 切面:某个集成的功能
- 连接点:程序执行时能够插入另外的程序的位置:比如说方法返回以后
- 通知:切面要完成的功能
- 切点: 定义在哪个连接点执行通知的功能是一种特殊的连接点,就是被使用的连接点
通知+所有切点 == 一个完整的切面
3.2 具体使用技巧
1:通知类型
前置、后置、环绕、返回后、抛出异常后
2:Spring中AOP实现
- SpringAOP 功能不如AspectJ强大,满足一般需要,常用
- AspectJ
3:Spring AOP的配置
<aop:config> 配置切面
<aop:point-cut>配置切点,使用'execution()'语法定义在何处切入类
'aop:before'等配置通知,配置pointcut和具体方法
4:也可以使用proxy的方式来实现AOP,但是现在已经很少用了,主要不方便,这里也不再记录,以后有机会再详细描述下。
本来我写这篇文章的意思主要是对视频中老师提到的知识点做一个大体的总结,不知道为什么写着写着变成了对整个Spring的框架的描述了,继续编辑的话需要注意。
Spring入门篇总结:的更多相关文章
- spring 入门篇
spring 入门篇 相对于Hibernate(冬眠),Spring(春天),具有更多的诗意与希望的感觉,是为了解决传统J2EE开发效率过低.开发商之间不统一.没有真正实现“写一次到处 ...
- SSM(spring mvc+spring+mybatis)学习路径——1-1、spring入门篇
目录 1-1 Spring入门篇 专题一.IOC 接口及面向接口编程 什么是IOC Spring的Bean配置 Bean的初始化 Spring的常用注入方式 专题二.Bean Bean配置项 Bean ...
- Spring入门篇——第1章 概述
第1章 概述 本章对课程的情况进行介绍,并介绍框架和Spring概况. 1-1 Spring入门课程简介 1-2 Spring概况 1-3 Spring框架
- Spring课程 Spring入门篇 6-2 ProxyFactoryBean及相关内容(上)
1 解析 1.1 类的方式实现各种通知需要实现的接口 1.2 创建Spring aop代理的优点及方法 1.3 代理控制切入点和通知的顺序的代码实现(具体完全实现,见代码2.1) 1.4 代理方式选择 ...
- 教妹学Java:Spring 入门篇
你好呀,我是沉默王二,一个和黄家驹一样身高,刘德华一样颜值的程序员(管你信不信呢).从两位偶像的年纪上,你就可以断定我的码龄至少在 10 年以上,但实话实说,我一直坚信自己只有 18 岁,因为我有一颗 ...
- Spring课程 Spring入门篇 7-2 Advice定义及实例
1 解析 1.1 通知:after和afterreturning的区别 1.2 @RunWith 是什么? 2 代码演练 2.1 注解方式配置通知的两种方式 2.2 异常通知 2.3 非异常通知 1 ...
- Spring课程 Spring入门篇 7-1 Aspect介绍及PointCut注解应用
本节主要是理论型: 关键看下节实操. 这个其实只要理解一点:使用AspectJ进行Spring AOP 编程,其实就是使用了JAVA注解的风格进行配置和使用. 不像之前讲的那样在配置文件中配置使用.
- Spring课程 Spring入门篇 6-3 ProxyFactoryBean及相关内容(下)
1 解析 1.1 使用global advisors demo 1.2 jdk代理和cglib代理的选择 1.3 如何强制使用CGLIB实现AOP? 1.4 JDK动态代理和CGLIB字节码生成的区别 ...
- Spring课程 Spring入门篇 6-1 Spring AOP API的PointCut、advice的概念及应用
本节主要是模拟spring aop 的过程. 实现spring aop的过程 这一节老师虽然说是以后在工作中不常用这些api,实际上了解还是有好处的, 我们可以从中模拟一下spring aop的过程. ...
随机推荐
- 基于socket.io打造hybrid调试页面
前言 参考的钉钉调试页面实现,仅供学习! 功能为: PC端编写代码,手机端执行 解决的痛点是: 避免了调试hybrid应用时重复写各种测试页面 源码与示例 源码 https://github.com/ ...
- 初识CC_MVPMatrix
初识CC_MVPMatrix CC_MVPMatrix是一个mat4类型的uniform,在shader代码被编译之前,它由cocos2d-x框架插入进来的. bool GLProgram::comp ...
- A:分段函数-poj
A:分段函数 总时间限制: 1000ms 内存限制: 65536kB 描述 编写程序,计算下列分段函数y=f(x)的值. y=-x+2.5; 0 <= x < 5 y=2-1.5(x- ...
- 杭电ACM题单
杭电acm题目分类版本1 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 1005 找规律(循环点) 1006 感觉有点BT的题,我到现在还没过 1007 经典问题,最 ...
- Thinkphp导入外部类的方法
相信很多人在使用TP时候都苦恼使用外部类各种不成功 下面为大家详细介绍下引用方法和注意细节 手动加载第三方类库 由于第三发类库没有具体的命名空间,所以需要使用以下几种方法手动导入 1.import方法 ...
- GDI+ 应用,Release没有错误,Debug很多。
问题描述: 在VC6环境中,一个界面工程利用了GDI+的一些库,Release模式下编译.运行无误,但在Debug模式下就会报告错误. xxx.cpp D:\Program Files\Microso ...
- deepin 环境变量配置加载顺序
加载顺序,默认是没有 .bash_profile 文件 1. non-login 方式 ~$ su deepin run /ect/bash.bashrc run .bashrc 2.login 方式 ...
- “use strict” 严格模式使用(前端基础系列)
ECMAscript5添加一种严格模式的运行模式("use strict"),让你的js语句在更加严格的环境下进行运行: 一.主要作用: 消除版本javascript中一些不合理及 ...
- 运行期以索引获取tuple元素-C++11之1
//运行期以索引获取tuple元素-C++11之1 //需支持C++11及以上标准的编译器,VS2017 15.5.x.CodeBlocks 16.01 gcc 7.2 //参见<深入应用C++ ...
- Web离线应用解决方案——ServiceWorker
什么是ServiceWorker 在介绍ServiceWorker之前,我们先来谈谈PWA.PWA (Progressive Web Apps) 是一种 Web App 新模型,并不是具体指某一种前沿 ...