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的过程. ...
随机推荐
- 使用Angular Router导航基础
名称 简介 Routes 路由配置,保存着那个URL对应着哪个组件,以及在哪个RouterOulet中展示组件. RouterOutlet 在HTML中标记路由内容呈现位置的占位符指令. Router ...
- TFBOY 养成记 一些比较好多文章。
API解释中文版(简书文章,没事看看): http://www.jianshu.com/p/e3a79eac554f Tensorlfow op辨异:tf.add()与tf.nn.bias_add() ...
- jquery 三级关联选择效果
在网页制作中,三级关联选择经常遇到,于是归纳了一个进行参考 代码如下: <!DOCTYPE html> <html lang="en"> <head& ...
- 【转】《高级前端3.6》JavaScript多线程——Concurrent.Thread.js, WebWork
原文链接:http://www.cnblogs.com/woodk/articles/5199536.html JavaScript多线程,在HTML5 WebWork没出现之前很多人都是用Concu ...
- 显示mysql线程和kill线程的命令
show processlist;//显示哪些线程正在运行. kill id //kill线程 通常在表被锁的时候用. show processlist;显示哪些线程正在运行.您也可以使用my ...
- Centos7.0 安装 oracle 11g 以及相关问题解决
参考其他的资源和自己实践内容总结出来的流程
- php代码在服务器中查看接值
error_log("You messed up!", 3, "/var/tmp/my-errors.log");
- js 数组去重复的方法
数组去重复是js中常用的方法,归纳了四种如下: 1. for + indexOf 去重复 var arr = [3,5,5,4,1,1,2,3,7,2,5]; var target = []; fo ...
- Springboot 使用 JSR 303 对 Controller 控制层校验及 Service 服务层 AOP 校验,使用消息资源文件对消息国际化
导包和配置 导入 JSR 303 的包.hibernate valid 的包 <dependency> <groupId>org.hibernate.validator< ...
- netty使用从0到1
本周强总在组内做了netty分享,内容相当不错,趁着这次分享记录的,以及以前研究,进行一下记录. java io形式存在三种,一种是BIO传统IO是阻塞IO,面向字符.字节服务都属于这一种.NIO官方 ...