浅谈spring

一、前言

从spring这个单词翻译就就是春天,意为java程序员的春天,给人一种生机勃勃的感觉。不过,说实话,我从大学学java到现在一直都用着spring或者spring boot,没经历EJB等一些以前的“寒冬”时代,可能感触没那么深。个人也对看得一些书中总结了下我对spring的理解和看法,肯定有很多不足之处,望大家多多指正。

二、spring是什么?

Spring是一个开源轻量级的Java开发应用框架,目的就是要简化应用程序开发,提高生产效率。

1.轻量级
零配置编程、API使用简单(spring boot更是进一步发扬了这优点,配置更少更清晰)

2.面向bean
只需要编写普通的bean

3.松耦合
充分利用了AOP思想

4.万能胶
与我们常用的框架都能进行很好的集成

5.设计模式
充分运用了Java经典的设计模式

三、为什么要用Spring

个人觉得4个足以概括:简化开发
它主要采用了4个关键的策略:
1.基于POJO的轻量级和最少侵入性编程;
2.通过依赖注入和面向接口松耦合;
3.基于切面和惯性进行声明式编程;
4.通过切面和模板减少样板式的重复代码;

从以上也能看出,spring最重要的就是:面向Bean、依赖注入和面向切面。

四、spring的基本原理

4.1 面向bean

面向Bean作用与Java面向对象的意义是一样的,这里对比下面向过程和面向对象的个人看法:C语言的面向过程对于代码的重用和管理是非常不方便的,而根据面向对象创建class,不仅方便重用和管理,更可以以生活的例子创建它,更了解他的意义,而且配合好的命名规范,可以让我们更直观的了解他这个class是干嘛的,这些都是面向对象的好处。所以spring面向bean是可以帮助我们更好地理解spring中的东西。
Spring中最核心的IOC容器就是存储bean的,而且保存了bean与bean之间的依赖关系。

4.2 IOC控制反转

简单拿个通俗易懂例子来说,我们创建一个类,要使用这个类里面的方法是,只有new一个变量实例化才能用里面的对象。而用了spring,我们只需要加一个@autowrite的注解,我们就能使用这个方法,spring自己进行了初始化、实例化,这就是所说的控制权。我们把控制权交给了spring,这就是所说的控制反转。

我们自己new出一个对象可以用一个变量保存下来,而我们的spring把这些对象实例化过后怎么保存下来?
答案是IOC容器,它存的就是spring实例化后的Java bean。但是IOC最终的目不只是为了存这些bean,而是要实现依赖注入。

什么是依赖注入呢?又拿个我们实际开发的一些例子来说,
第一我们用@autowrite注解一个接口,spring会自动把它的实现类注入进来。例如:

@autowrite
Interface Test test;

第二个可以根据IOC容器中类的ID(abc)对象自动注入,并且可以区分父子类的,例如

@Resource("abc")
A a;

第三可以根据类型自动注入,例如

@autowrite
A a;

第四种实例化的先后顺序,例如

class A{
    private B b;
    public void Test(){
        b.xxx();
    }
}

class B{
    private A a;
}

实例化顺序:a b c

个人觉得,说白了spring能自动把依赖关系弄明白,把并进行赋值。

Spring注入方式:
1、通过setter
2、构造方法
3、强制赋值,即使设置成private都能进行赋值

4.3 AOP 面向切面

网上有很多关于AOP的描述,个人觉得都太官方了,我刚看的时候也是看也不懂。我打算用一种通俗易懂的解释来说下AOP。
AOP的核心思想通俗点来说就是先把一个整体进行拆分,分别开发,等发布的时候,在组装在一起运行。那要怎么拆分呢?要根据一个规则来进行拆分,而规则就是一个切面。其实面向切面编程就是怎么制定规则,AOP思想无处不在,在我们AOP编程最终结果就是解耦。所以说,AOP的重点是怎么制定规则,可以把各个模块之间对应的规则总结出来,构成一个切面,把它单独抽离出来拆开。

举一个我们开发中常用的例子:事务
事务执行顺序:
第一步:开启一个事务
第二步:执行提交事务/事务回滚
第三步:关闭事务

这种有规律的东西,我们就可以认为他是一个固定的规则,这时我们就单独把具有一定的规律的规则,单独抽离出来,作为一个独立的模块,也是一个切面。

你可能感兴趣的:(浅谈spring)