什么是Spring

定义:Spring 是一个轻量级的 DI / IoC 和 AOP 容器的开源框架,目的为了简化java开发。

DI:注入

IOC:控制反转

AOP:面向切面编程

原理:利用了java的反射机制

常用术语

框架

定义:项目的整体架构模型,可以协助我们更快更方便地进行开发。

非侵入式设计

定义:从框架的角度看即无需继承框架提供的任何类,当更换框架时,大部分的功能代码无需改变。

轻量级和重量级

轻量级:非入侵性的、所依赖的东西非常少、资源占用非常少、部署简单等等特点。

重量级:与轻量级相反,一般迁移、更换起来会比较麻烦。

JavaBean

  定义:一种java类,一个可重复使用的软件组件,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称bean。 类中定义了具体的属性,并通过get、set方法暴露出去给其他类调用。(可以简单理解为数据传输模型的载体

POJO

  定义:简单的Java对象,具有getter/setter方法,常见的VO(value -object)和DTO(Data Transform Object)就是一种POJO,不允许有业务方法,也不能携带有connection之类的方法。(即不包含业务逻辑或持久逻辑等。)

特点:

这个类必须有一个公共的缺省构造函数

这个类的属性使用getter和setter来访问,其他方法遵从标准命名规范。

这个类应是可序列化的

容器

定义:从程序设计角度看就是装对象的的对象,因为存在放入、拿出等操作,所以容器还要管理对象的生命周期

Spring优势

低侵入 / 低耦合 (降低组件之间的耦合度,实现软件各层之间的解耦)

声明式事务管理(基于切面和惯例)

方便集成其他框架(如MyBatis、Hibernate)

降低 Java 开发难度

Spring 框架中包括了 J2EE 三层的每一层的解决方案(一站式)

Spring的功能

① Spring 能帮我们根据配置文件创建及组装对象之间的依赖关系。

② Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。

③ Spring 能非常简单的帮我们管理数据库事务。

④ Spring 还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板来方便数据库访问。

⑤ Spring 还提供与第三方Web(如Struts1/2、JSF)框架无缝集成,而且自己也提供了一套Spring MVC框架,来方便web层搭建。

⑥ Spring 能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)。

Spring框架

Data Access/Integration层包含有JDBC、ORM、OXM、JMS和Transaction模块。

Web层包含了Web、Web-Servlet、WebSocket、Web-Porlet模块。

AOP模块提供了一个符合AOP联盟标准的面向切面编程的实现。

Core Container(核心容器):包含有Beans、Core、Context和SpEL模块。

Test模块支持使用JUnit和TestNG对Spring组件进行测试。

Spring容器中Bean的生命周期

简单文字归纳一下:

1-2  创建实例

  现在假设spring就是个容器,而配置文件中配置的bean属性才是我们真正需要的东西。创建实例就是说,我把配置文件中的bean信息取出来化作一个真正的bean并放到容器中。

3-4  注入依赖关系

  第3步是创建实例之后对实例作了一些处理,第4步是把xml中配置的bean属性值赋予给容器中的实例化之后的bean。

5  bean初始化之前的处理

  应用开发者需要把容器中实例化的bean拿出来用,这个拿出来的过程就是初始化,第五步就是在初始化之前,对已经实例化的bean再作一定的处理。

6-7  初始化

  如果bean实现了InitializingBean,那么将调用InitializingBean的afterPropertiesSet()方法做一些初始化处理。如果没有实现InitializingBean,而是在配置文件中定义了init-method属性值,那么系统会找到init-method对应的方法并执行之,程序猿哥哥一般在这个方法里写一些初始化操作;

8  bean初始化之后的处理

  初始化之后在这个方法中再对bean进行修饰装点。

9-10  交给应用开发人员处理

  如果在<bean>中指定Bean的作用范围是scopt="prototype",那么系统将bean返回给调用者,spring就不管了(如果两个实例调用的话,每一次调用都要重新初始化,一个实例的修改不会影响另一个实例的值。如果指定Bean的作用范围是scope="singleton",则把bean放到缓冲池中,并将bean的引用返回给调用者。这个时候,如果两个实例调用的话,因为它们用的是同一个引用,任何一方的修改都会影响到另一方。)

11  bean用完之后

  对于scope="singleton"的bean,使用完之后spring容器会做一些处理,比如编写释放资源、记录日志等操作。

12  销毁

  调用配置文件中的销毁方法销毁实例。

参考资料:

Spring学习(特此感谢!)

Spring学习(一)初识Spring的更多相关文章

  1. Spring学习,初识Spring

    Spring概述 将Spring理解为管理对象间依赖关系的容器 “解耦” 根据功能的不同,可以将一个系统中的代码分为 主业务逻辑 与 系统级业务逻辑 两类 ```Spring 是为了解决企业级开发的复 ...

  2. Spring学习1:Spring基本特性

    http://longliqiang88.github.io/2015/08/14/Spring%E5%AD%A6%E4%B9%A01%EF%BC%9ASpring%E5%9F%BA%E6%9C%AC ...

  3. Java开发学习(一)----初识Spring及其核心概念

    一. Spring系统架构 1.1 系统架构图 Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基. Spring Framework的发展也经历了很多版本的变更,每 ...

  4. spring学习笔记(一) Spring概述

    博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书.  强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...

  5. Java架构师之路 Spring学习笔记(一) Spring介绍

    前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...

  6. Spring学习1-初识Spring

    一.简介   1.Spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架.它的主要目得是简化企业开发.  2.为何要使用Spring?   ...

  7. Spring学习 6- Spring MVC (Spring MVC原理及配置详解)

    百度的面试官问:Web容器,Servlet容器,SpringMVC容器的区别: 我还写了个文章,说明web容器与servlet容器的联系,参考:servlet单实例多线程模式 这个文章有web容器与s ...

  8. Spring学习9-MyEclipse中Spring工程使用@Resource注释的问题

    在MyEclipse 的Spring工程中,有时候要使用@Resource注释来驱动Spring配置.但是在MyEclipse添加Spring开发能力的操作中,并没有 把相关的库添加到工程的class ...

  9. Spring学习十四----------Spring AOP实例

    © 版权声明:本文为博主原创文章,转载请注明出处 实例 1.项目结构 2.pom.xml <project xmlns="http://maven.apache.org/POM/4.0 ...

  10. Spring学习(五)--构建Spring Web应用程序

    一.Spring MVC起步 看过猫和老鼠的小伙伴都可以想象Tom猫所制作的捕鼠器:它的目标 是发送一个小钢球,让它经过一系列稀奇古怪的装置,最后触发捕鼠 器.小钢球穿过各种复杂的配件,从一个斜坡上滚 ...

随机推荐

  1. 基于Java的二叉树的三种遍历方式的递归与非递归实现

    二叉树的遍历方式包括前序遍历.中序遍历和后序遍历,其实现方式包括递归实现和非递归实现. 前序遍历:根节点 | 左子树 | 右子树 中序遍历:左子树 | 根节点 | 右子树 后序遍历:左子树 | 右子树 ...

  2. 四则运算生成命令行程序 (Python)

    Github项目地址:Github Pages 结对项目成员:张鹏 3118004985 郑靓 3118004988 一.项目需求分析 二.功能实现 三.代码实现or功能说明 ★ GUI功能扩展说明 ...

  3. 从一个小需求感受Redis的独特魅力

    分享一个简单的小需求应该怎么设计实现以及有关Redis的使用 Redis在实际应用中使用的非常广泛,本篇文章就从一个简单的需求说起,为你讲述一个需求是如何从头到尾开始做的,又是如何一步步完善的. 需求 ...

  4. SPSSAU数据分析思维培养系列3:分析思路

    本文章为SPSSAU数据分析思维培养的第3期文章. 上文讲解如何选择正确的分析方法,除了有正确的分析方法外,还需要把分析方法进行灵活运用.拿到一份数据,应该如何进行分析,总共有几个步骤,第一步第二步应 ...

  5. webgl实现径向模糊

    径向模糊简介 径向模糊,是一种从中心向外呈幅射状,逐渐模糊的效果. 因此径向模糊经常会产生一些中心的发散效果,在PS中同样也有径向模糊的滤镜效果. 径向模糊通常也称为变焦模糊.径向模糊(Radial ...

  6. SpringBoot系列——MyBatis-Plus整合封装

    前言 MyBatis-Plus是一款MyBatis的增强工具(简称MP),为简化开发.提高效率,但我们并没有直接使用MP的CRUD接口,而是在原来的基础上封装一层通用代码,单表继承我们的通用代码,实现 ...

  7. 【独家】React Native 版本升级指南

    前言 React Native 作为一款跨端框架,有一个最让人头疼的问题,那就是版本更新.尤其是遇到大版本更新,JavaScript.iOS 和 Android 三端的配置构建文件都有非常大的变动,有 ...

  8. make编译出错 usr/bin/ld: /data/app/openssl/lib/libcrypto.a(ecs_asn1.o): relocation R_X86_64_PC32 against symbol `ECDSA_SIG_it' can not be used when making a shared object; recompile with -fPIC

    当make编译出现错误 usr/bin/ld: /data/app/openssl/lib/libcrypto.a(ecs_asn1.o): relocation R_X86_64_PC32 agai ...

  9. Vue最全知识点

    声明:本篇文章纯属笔记性文章,非整体原创,是对vue知识的整理, 基础篇 说说你对MVVM的理解 Model-View-ViewModel的缩写,Model代表数据模型,View代表UI组件,View ...

  10. [ASP.NET Core开发实战]基础篇02 依赖注入

    ASP.NET Core的底层机制之一是依赖注入(DI)设计模式,因此要好好掌握依赖注入的用法. 什么是依赖注入 我们看一下下面的例子: public class MyDependency { pub ...