Spring

前言

经过一段时间的迷茫,我深深的感受到自己学习效率的低下,由于(实习)工作之后的生活个人可支配时间减少,自己又不满足于重复性的工作(虽然依旧在努力接受知识,但是还是无法真切的感受到自己技术上的提升),我发现一些近期的个人问题并立志于改变这种糟糕的现状 :

1. 对自己的时间没有明确的计划,导致没有学习动力

想起来就看看,没有有效利用时间,太过碎片化的学习往往让自己对很多知识都浅尝辄止

2. 对自己的学习方向和起点没有准确的定位

思维太过跳跃,总是想到什么去看什么(兴趣本身并没有错,但要处理完当前的事情,可以先把自己的灵感点记录下来再看),缺少系统学习一项知识的耐心

3. 对个人能力的判断不准确

因为涉及范围广,导致自己总觉得“事无不可为”,其实即使了解了大概的理论和框架,本质上却没有深刻的感悟,非常不利于之后的学习和成长。

而这篇笔记将作为我未来一段时间内的对学习的引导和督促者。

方案

一、开始Spring的学习

为什么从spring入手

在java开发方面,Spring的重要性和影响力是毋庸置疑的,除此之外,不论是初级开发者还是高级架构师,都可以从Spring中学习到很多:后端开发、设计思想、Java基础、设计模式、甚至一些创造灵感,首先、spring是很有潜力的

再就是,spring对于每个接触过Java语法的人是友好的

最后,便是因为个人对Spring的掌握并不扎实,在这个Spring全家桶在Java界大行其道的环境下,这个简直是致命伤,这让我其他方面的知识储备在面试时显得苍白无力。

二、学习计划

说了很多无关紧要的话,下面就是重点了:

我决定将我对spring的学习分为以下几个层次,并对这些模块进行了解使用和原理的简单探索。(计划在每个大章节之后进行原理推测专题的更帖)

一、Spring

  1. Spring概述(本章节讲解)
  2. SpringIoc容器
    1. Spring依赖注入
    2. Spring自动装配
    3. Spring基于注解的配置
  3. Spring框架和AOP
  4. Spring JDBC框架
  5. Spring事务管理
  6. Spring Web MVC

二、 SSM

  1. Spring MVC
  2. MyBatis
  3. 搭建一个简单的SSM项目结构

三、SSH

  1. struts2
  2. hibernate
  3. 搭建一个简单的SSH项目结构

四、Spring cloud

  1. Spring Boot
  2. Spring Cloud

由于个人能力的局限性,这个学习计划可能并不完善,我会在今后的时间内尽力将这些知识进行掌握,相信随着学习的深入我会有更多的收获的。(目前希望自己能每天都对其中的一个体系进行总结和文章的发布,加油,冲鸭!!!)


———– 分割线 ————

spring概述

概述

Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用Spring 框架来创建性能好、易于测试、可重用的代码。
Spring 框架是一个开源的 Java 平台,它最初是由 Rod Johnson 编写的,并且于 2003 年 6 月首次在 Apache 2.0 许可下发布。
Spring 是轻量级的框架,其基础版本只有 2 MB 左右的大小。
Spring 框架的核心特性是可以用于开发任何 Java 应用程序,但是在 Java EE 平台上构建 web 应用程序是需要扩展的。 Spring 框架的目标是使 J2EE 开发变得更容易使用,通过启用基于 POJO 编程模型来促进良好的编程实践。

Spring总结起来优点如下:

Spring框架的组成结构图如下所示: image

Spring的核心机制

管理Bean

程序主要是通过Spring容器来访问容器中的Bean,ApplicationContext是Spring容器最常用的接口,该接口有如下两个实现类:

public class BeanTest{
    public static void main(String args[]) throws Exception{
        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
        Person p = ctx.getBean("person", Person.class);
        p.say();
    }
}

Eclipse使用Spring

在Eclipse等IDE工具中,用户可以自建User Library,然后把Spring的Jar包都放入其中,当然也可以将Jar包直接放在项目的/WEB-INF/lib目录下,但是如果使用User Library,在项目发布时,需要将用户库所引用的Jar文件随应用一起发布,就是将User Library所使用的Jar复制到/WEB-INF/lib目录下,这是因为对于一个Web应用,Eclipse部署Web应用时不会将用户库的Jar文件复制到/WEB-INF/lib下,需要手动复制。

依赖注入

Spring框架的核心功能有两个:

使用依赖注入,不仅可以为Bean注入普通的属性值,还可以注入其他Bean的引用。依赖注入是一种优秀的解耦方式,其可以让Bean以配置文件组织在一起,而不是以硬编码的方式耦合在一起。

Spring 涉及的几个概念

依赖注入(DI)
Spring 最认同的技术是控制反转的依赖注入(DI)模式。控制反转(IoC)是一个通用的概念,它可以用许多不同的方式去表达,依赖注入仅仅是控制反转的一个具体的例子。 当编写一个复杂的 Java 应用程序时,应用程序类应该尽可能的独立于其他的 Java 类来增加这些类可重用可能性,当进行单元测试时,可以使它们独立于其他类进行测试。依赖注入(或者有时被称为配线)有助于将这些类粘合在一起,并且在同一时间让它们保持独立。 到底什么是依赖注入?让我们将这两个词分开来看一看。这里将依赖关系部分转化为两个类之间的关联。例如,类 A 依赖于类 B。现在,让我们看一看第二部分,注入。所有这一切都意味着类 B 将通过 IoC 被注入到类 A 中。 依赖注入可以以向构造函数传递参数的方式发生,或者通过使用 setter 方法 post-construction。由于依赖注入是 Spring 框架的核心部分,所以我将在一个单独的章节中利用很好的例子去解释这一概念。

面向方面的程序设计(AOP):
Spring 框架的一个关键组件是面向方面的程序设计(AOP)框架。一个程序中跨越多个点的功能被称为横切关注点,这些横切关注点在概念上独立于应用程序的业务逻辑。有各种各样常见的很好的关于方面的例子,比如日志记录、声明性事务、安全性,和缓存等等。 在 OOP 中模块化的关键单元是类,而在 AOP 中模块化的关键单元是方面。AOP 帮助你将横切关注点从它们所影响的对象中分离出来,然而依赖注入帮助你将你的应用程序对象从彼此中分离出来。 Spring 框架的 AOP 模块提供了面向方面的程序设计实现,可以定义诸如方法拦截器和切入点等,从而使实现功能的代码彻底的解耦出来。使用源码级的元数据,可以用类似于.Net属性的方式合并行为信息到代码中。我将在一个独立的章节中讨论更多关于 Spring AOP 的概念。