本文是对慕课网上"搞定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入门篇总结:的更多相关文章

  1. spring 入门篇

    spring 入门篇         相对于Hibernate(冬眠),Spring(春天),具有更多的诗意与希望的感觉,是为了解决传统J2EE开发效率过低.开发商之间不统一.没有真正实现“写一次到处 ...

  2. SSM(spring mvc+spring+mybatis)学习路径——1-1、spring入门篇

    目录 1-1 Spring入门篇 专题一.IOC 接口及面向接口编程 什么是IOC Spring的Bean配置 Bean的初始化 Spring的常用注入方式 专题二.Bean Bean配置项 Bean ...

  3. Spring入门篇——第1章 概述

    第1章 概述 本章对课程的情况进行介绍,并介绍框架和Spring概况. 1-1 Spring入门课程简介 1-2 Spring概况 1-3 Spring框架

  4. Spring课程 Spring入门篇 6-2 ProxyFactoryBean及相关内容(上)

    1 解析 1.1 类的方式实现各种通知需要实现的接口 1.2 创建Spring aop代理的优点及方法 1.3 代理控制切入点和通知的顺序的代码实现(具体完全实现,见代码2.1) 1.4 代理方式选择 ...

  5. 教妹学Java:Spring 入门篇

    你好呀,我是沉默王二,一个和黄家驹一样身高,刘德华一样颜值的程序员(管你信不信呢).从两位偶像的年纪上,你就可以断定我的码龄至少在 10 年以上,但实话实说,我一直坚信自己只有 18 岁,因为我有一颗 ...

  6. Spring课程 Spring入门篇 7-2 Advice定义及实例

    1 解析 1.1 通知:after和afterreturning的区别 1.2 @RunWith 是什么? 2 代码演练 2.1 注解方式配置通知的两种方式 2.2 异常通知 2.3 非异常通知 1 ...

  7. Spring课程 Spring入门篇 7-1 Aspect介绍及PointCut注解应用

    本节主要是理论型: 关键看下节实操. 这个其实只要理解一点:使用AspectJ进行Spring AOP 编程,其实就是使用了JAVA注解的风格进行配置和使用. 不像之前讲的那样在配置文件中配置使用.

  8. Spring课程 Spring入门篇 6-3 ProxyFactoryBean及相关内容(下)

    1 解析 1.1 使用global advisors demo 1.2 jdk代理和cglib代理的选择 1.3 如何强制使用CGLIB实现AOP? 1.4 JDK动态代理和CGLIB字节码生成的区别 ...

  9. Spring课程 Spring入门篇 6-1 Spring AOP API的PointCut、advice的概念及应用

    本节主要是模拟spring aop 的过程. 实现spring aop的过程 这一节老师虽然说是以后在工作中不常用这些api,实际上了解还是有好处的, 我们可以从中模拟一下spring aop的过程. ...

随机推荐

  1. CCF认证考试——折点计数

    描述:简单题 #include<iostream> using namespace std; int main() { ], n, count = ; cin >> n; ; ...

  2. nginx使用replace-filter-nginx-module实现内容替换

    有时候我们想对响应(例如PHP接口)返回的内容做些字符串,虽然可以使用各语言代码相关方法(例如PHP的str_replace)进行替换,但是在nginx层面替换是更方便的,无需修改代码. 约定:本文源 ...

  3. Error parsing column 8 (IsRecommended=0 - SByte) Dapper查询mysql数据库可空的tinyint(1)一个错误

    出错条件: 1.实体属性为bool?类型 2.对应字段为可空的tinyint(1)类型 3.该字段查询结果内即含有null,又含有正常值 google答案,两种建议: 1.修改sql语句,直接cast ...

  4. Python中的列表生成器,迭代器的理解

    首先,思考一个问题,比如,我们想生成0-100的列表,我们怎么做? 当然,可以写成 list1=[1,2,3...,100] 可以看出,这种方法不适合生成长的列表,那么Python中就可以利用已有的列 ...

  5. openstack pike 创建vxlan网络

    #openstack pike 创建vxlan网络 openstack pike 集群高可用  安装部署 汇总 http://www.cnblogs.com/elvi/p/7613861.html # ...

  6. CentOS6.5 下Nginx 的安装与配置

    昨天买了个服务器最近在配置一些基础环境,想在访问www.wzpbk.com:8080  不想要后面的:8080就能直接访问到,听说了Nginx就研究下给服务器装上传说中大名鼎鼎 Nginx 他能反向代 ...

  7. javascript设计模式——策略模式

    前面的话 在程序设计中,常常遇到类似的情况,要实现某一个功能有多种方案可以选择.比如一个压缩文件的程序,既可以选择zip算法,也可以选择gzip算法.这些算法灵活多样,而且可以随意互相替换.这种解决方 ...

  8. JAVA中静态修饰符static的学习(初学)

    静态修饰符static,用于修饰类中的成员变量和成员函数. 用static修饰的成员变量也可叫做类变量. 什么时候使用静态 什么时候定义静态成员变量?     当对象中出现共享数据时,将该数据定义为静 ...

  9. 》》初识移动端--rem

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta na ...

  10. Java 模拟栈结构

    栈和队列: 通常是作为程序猿的工具,用于辅助构思算法.生命周期较短,执行时才被创建 訪问受限.在特定时刻,仅仅有一个数据可被读取或删除 是一种抽象的结构.内部的实现机制.对用户不可见.比方用数组.链表 ...