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的过程. ...
随机推荐
- 登山(Climb)
题目: Rocky山脉有n个山峰,一字排开,从西向东依次编号为1, 2, 3, --, n.每个山峰的高度都是不一样的.编号为i的山峰高度为hi. 小修从西往东登山.每到一座山峰,她就回头观望自己走 ...
- 常见优化算法统一框架下的实现:最速下降法,partan加速的最速下降法,共轭梯度法,牛顿法,拟牛顿法,黄金分割法,二次插值法
常见优化算法实现 这里实现的主要算法有: 一维搜索方法: 黄金分割法 二次差值法 多维搜索算法 最速下降法 partan加速的最速下降法 共轭梯度法 牛顿法 拟牛顿法 使用函数表示一个用于优化的目标, ...
- linux网络、性能相关命令
netstat -tunpl #查看进程列表 top #查看系统资源统计 服务器速度测试 ping 123.57.92.9 -t 每一个被发送出的IP信息包都有一个TTL域,该域被设置为一个较高的数值 ...
- jsp运行原理及运行过程
JSP的执行过程主要可以分为以下几点: 1)客户端发出请求. 2)Web容器将JSP转译成Servlet源代码. 3)Web容器将产生的源代码进行编译. 4)Web容器加载编译后的代码并执行. 5)把 ...
- This package contains perl-5.16.3, java8, nifi-1.1.2 on ubuntu:14.04
[How to build:]cd /home/ops/work/demo/docker/aws/srctouch Dockerfiledocker build -t aws_src_image:v1 ...
- 域名和ip不能访问的原因
centos的话可能默认可能会有firewalld,可以执行 systemctl stop firewalld systemctl disable firewalld 禁用后在看看,前提都是域名得备案 ...
- Laravel 框架安装
Composer 在命令行执行 create-project 来安装 Laravel:就是下面这一句话就OK了!composer create-project laravel/laravel --pr ...
- 在网站开发中经常用到的javaScript技术
1>屏蔽功能类 1.1 屏蔽键盘所有键<script language="javascript"><!--function document.onkeyd ...
- 利用InfluxDB和Grafana搭建数据监测的仪表盘
InfluxDB的介绍及安装 InfluxDB是支持持续写入的时序数据库,常用于监测系统所需要的数据的存储. 官网的详细安装步骤 https://docs.influxdata.com/influxd ...
- 贝叶斯来理解高斯混合模型GMM
最近学习基础算法<统计学习方法>,看到利用EM算法估计高斯混合模型(GMM)的时候,发现利用贝叶斯的来理解高斯混合模型的应用其实非常合适. 首先,假设对于贝叶斯比较熟悉,对高斯分布也熟悉. ...