一、整体认识spring
1.1为什么会有spring
创建Spring的主要目的是用来替代更加重量级的企业级Java技术,尤其是EJB.
1.2spring的组成部分。
Spring框架由六个模块分类组成,但目前接触的主要是容器、aop,orm框架集成,spring MVC,还有spring boot等
二、spring的特点:
2.1简述:
Spring做的是简化开发具体表现为四个方面:
(1)基于POJO的轻量级和最小侵入性编程;
(2)通过依赖注入和面向接口实现松耦合;
(3)基于切面和惯例进行声明式编程;
(4)通过切面和模板减少样板式代码。
2.2基于POJO的轻量级和最小侵入性编程
(1)最小侵入性编程:多框架通过强迫应用继承它们的类或实现它们的接口从而导致应用与框架绑死。
(2)保持pojo的独立性:Spring不会强迫你实现Spring规范的接口或继承Spring规范的类,相反,在基于Spring构建的应用中,它的类通常没有任何痕迹表明你使用了Spring。最坏的场景是,一个类或许会使用Spring注解,但它依旧是POJO。
代码示例:
//Spring的非侵入编程模型:一个普通的javabean,没有任何地方表明它是一个spring组件
//这个类在Spring应用和非Spring应用中都可以发挥同样的作用。
public class HelloWorldBean{
publicString sayHello(){
return"helloWorld";
}
}
2.3通过依赖注入和面向接口实现松耦合
(1)依赖注入:
1)为什么要实现依赖注入:
任何一个有实际意义的应用(肯定比HelloWorld示例更复杂)都会由
两个或者更多的类组成,这些类相互之间进行协作来完成特定的业务逻辑。
按照传统的做法,每个对象负责管理与自己相互协作的对象(即它所依赖的对象)的引用,这将会导致高度耦合和难以测试的代码。
代码示例:
public class DamselRescuingKnight implementKnight{
privateRescueDamselQuest quest;
pulicDamselRescuingKnight(){
//RescueDamselQuest类与DamselRescuingKnight类紧密地耦合到了一起
//即骑士必救少女,如何需要执行其他的任务,那么就继续耦合,最后骑士的任务会变得异常繁重
//创建DamselRescuingKnight类,必创建RescueDamselQuest类
this.quest=newRescueDamselQuest();
}
//测试该方法时也会变得很困难,因为你无法保证quest.embark()方法被调用,因为quest可能并没有被创建
publicvoid embarkOnQuest(){
quest.embark();
}
}
2)什么是依赖注入:
通过DI,对象的依赖关系将由系统中负责协调各对象的第三方