补充:Spring中Bean的作用域、生命周期:https://www.cnblogs.com/zhanglei93/p/6231882.html
- Spring框架的由来和发展
- 了解Spring框架的组成体系
- 了解Spring在应用开发中的作用
- 理解”控制反转“和”依赖注入“
- 了解控制反转的实现方式


一、Spring框架的组成



- 轻量级J2EE应用开发框架
- 主要构成:依赖注入容器,AOP实现、DAO/ORM支持、Web集成
- Core封装包:框架的最基础部分,提供IoC依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许从成程序逻辑中分分离出依赖关系和配置。
- 构建与Core封装包基础上的Context封装包,提供了一种框架式的对象访问方法,有些像JNDI注册器。Context封装包的特性来自于Beans封装包,并添加了对国际化(I18N)的支持(如资源绑定)时间传播,资源装载的方式和Context的透明创建,比如说通过Servlet容器
- DAO提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码。并且,JDBC封装包还提供了一种比编程性更好的声明性事务管理方法,不仅仅是实现了特定接口,而且对所有的POJO都适用。
- ORM封装包提供了常用的“对象-关系”映射API的集成层。利用ORM封装包,可以混合使用所有Spring提供的特性进行”对象-关系“映射。如简单声明性事务管理。
- Spring的AOP封装包提供了符合AOP(Aspect—oriented-programming)面向切面编程。
- Spring的Web包提供了基础的针对web开发的集成特性,当与WebWork或struts一起使用Spring时,这个包可以与其他框架结合。
- Spring中的MVC封装包提供了Web应用的Model-View-Controller(MVC)实现。Spring的MVC框架提供了一种清晰的分离模型。Spring的MVC框架提供了一种清晰的分离模型,在领域模型代码和web form之间,并且还可以借助Spring框架的其他特性。

二、Spring框架的作用

典型的应用程序开发过程中,开发人员使用Struts、WebWork等应用程序框架开发前端程序,而采用JDO、Hibernate等持久层框架进行数据库操作,使用Spring IoC容器(控制反转)对整个系统中的组件进行配置和管理。

2.1、IoC

控制反转(Inversion of Control),指的是将创痛编程方式中的程序依赖关系的控制权从程序内部转移到程序外部,允许程序员从程序逻辑中分离出对具体实现的依赖和管理。
控制反转也体现了”面向接口编程”、分离调用与实现的设计思想。

2.2、依赖注入

由容器动态地将某种依赖关系注入到组件之间。
控制反转也称为”依赖注入“(Dependency Injection DI)

IoC/DI示例:
依赖注入是Java编程思想中”面向接口编程“的体现,因此在设计程序是,对于程序所依赖的组件往往以忌口的形式出现,而不直接使用具体的实现类:

//设计接口
public interface PersonLogic{
String sysHello();
}
//使用接口
public class Action{
public void execute(){
//依赖接口的某个实现类的实例来完成处理
system.out.println(person.sayHello());
}
}

2.3、IoC/DI的实现方式

2.3.1、Type1 接口注入

方法的调用者通过方法参数提供一个接口的实现类(所依赖的组件)

//在方法参数中使用组件接口
public class DemoAction{
public void execute(PersonLogic person){
//Action的功能实现依赖于通过方法参数传递的Logic对象
system.out.println(person.sayHello());
}
}
//调用方法时,从外部注入所依赖的组件
DemoAction action = new DemoAction();
PersonLogic person = new PersonLogicEnImpl();
action.execure(person);

2.3.2、Type2 设值注入

借鉴JavaBean的设计方法,把业务处理对象所以来的其它组件通过setter方法传递进来

//所依赖的组件以属性的形式出现,并提供相应的getter、setter方法
public class DemoAction{
private PersonLogic person;
//通过设值注入所依赖的组件
public void setPerson(PersonLogic person){
this.person = person;
}
....
//调用方法时通过setter方法从外部注入所依赖的组件
DemoAction action = new DemoAction();
PersonLogic person = new PersonLogicCnImpl();
action.setPerson(person);
action.execute();

2.3.3、Type3 构造参数注入

在业务处理对象初始化的阶段,就将所以来的其他组件通过构造方法设置好;在初始化阶段完成之后,就可以得到一个完整的业务对象直接使用。

//所依赖的组件以属性的形式出现,并在构造方法中提供
public class DemoAction{
//所依赖的组件以属性的形式出现
private PersonLogic person;
//通过构造方法在初始化阶段获得所依赖的组件
public DemoActionType3(PersonLogic person){
this.person = person;
}
//调用方法时通过构造方法从外部注入所依赖的组件
PersonLogic person = new PersonLogicCnImpl();
DemoAction action = new DemoAction(person);
action.execute();

2.4 依赖注入实现方式的比较

2.4.1、Type1 接口注入

  • 历史悠久,在大量的容器、框架设计中都有采用,例如servlet,struts1等
  • 灵活性、易用性不足,目前依赖注入模式的开发中Type2、Type3成为主流

2.4.2、Type2 设值注入

  • 近似于传统的javabean模式,对于程序员来说,通过setter方法来设置依赖关系更加直观、自然
  • 避免了庞大臃肿的构造函数,特别是在依赖关系复杂的情况下不用在构造函数中出现众多的构造函数,在编码中更为简洁
  • 在某些框架中,对构造函数有一定的限制(往往要求提供一个默认的构造函数)这时Type3方式就显得无能为力。

2.4.3、Type3 构造参数注入

  • 完全符合”在构造期即创建一个完整的、合法的对象“的java设计原则
  • 所有的依赖关系在构造方法中集中体现
  • 由于没有setter方法能改变依赖关系,所有组建在创建之后处于相对”稳定“状态。同时在一定程度上也对外界屏蔽了依赖关系的细节。
  • 对于复杂的依赖关系,可以通过构造方法决定依赖关系注入的顺序。

三、应用

3.1、所需包

3.2、applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="fruit" class="com.it.spring.type1.Banana"></bean><bean id="song2" class="com.it.spring.type2.Song"><property name="songName" value="小苹果"></property></bean><bean id="sing" class="com.it.spring.type2.Sing"><property name="song" ref="song2"></property></bean><bean id="song3" class="com.it.spring.type3.Song"><property name="name" value="小苹果"></property></bean><bean id="sing3" class="com.it.spring.type3.Sing"><constructor-arg index="0" name="song" ref="song3"></constructor-arg></bean>
</beans>

四、总结

  • Spring框架的产生
  • Spring框架由依赖注入容器、AOP实现,DAO/ORM支持、Web集成等多个部分组成。
  • Spring在应用程序中对整个应用系统中的组件进行配置和管理
  • IoC将传统编程方式中的程序依赖关系的控制权从程序内部转移到程序外部,从程序逻辑中分离出对具体实现的依赖和管理。
  • DI的实现方式中,接口注入出现最早,但因为灵活性、易用性方面的不足,IoC领域不再是主流选择。
  • Type2设值注入和Type3构造参数注入都是目前比较主流的做法,但是由于实现方法的不同,在运用中也有各自的优点。

Spring框架学习笔记相关推荐

  1. Spring框架学习笔记,超详细!!(4)

    Java小白开始学习Spring框架,一方面,跟着视频学习,并记录下学习笔记,方便以后复习回顾.另一方面,发布学习笔记来约束自己,学习路程还很遥远,继续加油坚持!!!希望能帮助到大家! 另外还有我的牛 ...

  2. Spring框架学习笔记(三)(AOP,事务管理)

    Spring框架学习笔记(三) 九.AOP 9.1 AOP的注解配置 (1) 新建计算器核心功能(模拟:不能在改动核心代码) (2) 建立一个普通的Java类写增强代码(面向切面编程),使用Sprin ...

  3. Spring框架学习笔记---完结

    一.简介 Spring:春天----->给软件行业带来了春天 2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架. 2004年3月24日,Spring框架 ...

  4. Spring框架学习笔记(1) ---[spring框架概念 , 初步上手使用Spring , 控制反转 依赖注入初步理解 ]

    spring官网 -->spring官网 spring5.3.12–>spring-framework 在线文档 --> Spring 5.3.12 文章目录 1.Spring概论 ...

  5. Spring框架学习笔记01:初探Spring——采用Spring配置文件管理Bean

    文章目录 一.Spring概述 二.入门案例演示 (一)创建Maven项目[SpringDemo2021] (二)在pom.xml文件里添加依赖 场景:勇敢的骑士去完成杀龙的任务. (三)创建杀龙任务 ...

  6. spring框架学习笔记(一)

    仅为个人笔记,方便自己日后查看. eclipse安装spring插件的方法: http://jingyan.baidu.com/article/1612d5005fd087e20f1eee10.htm ...

  7. spring框架学习笔记2:配置详解

    简单写一个类做示例: package bean;public class User {private String name;private Integer age;public String get ...

  8. Spring框架学习笔记(7)——代理对象实现AOP

    AOP(面向切面编程) AOP(Aspect-Oriented Programming, 面向切面编程): 是一种新的方法论, 是对传统 OOP(Object-Oriented Programming ...

  9. Spring框架学习笔记04:初探Spring——采用Java配置类管理Bean

    文章目录 一.课程引入 二.采用Java配置类管理Bean (一)打开项目[SpringDemo2021] (二)创建net.hw.spring.lesson04包 (三)创建杀龙任务类 (四)创建勇 ...

  10. Spring框架学习笔记(2)——IOCDI

    IOC:控制反转,创建对象的权利交给Spring,Spring会自动创建对象. DI:依赖注入,操作的对象靠Spring注入,如果不使用Spring,对象的属性值是要靠setter方法来添加的,使用S ...

最新文章

  1. 饭卡(HDOJ2546)
  2. Add Binary
  3. js实现返回顶部功能的解决方案
  4. python设计模式有哪些_设计模式教程
  5. python 打印文件名_在Python中打印文件名,关闭状态和文件模式
  6. Oracle PL/SQL中异常高级特性
  7. Django视图系统
  8. 网工考试——网络体系结构、物理层和数据通信
  9. 计算机奖状模板,制作电子奖状
  10. 联想昭阳E46G笔记本识别4G内存问题
  11. 计算机打印状态错误,打印机状态错误怎么办 打印机状态错误解决方法【图文】...
  12. java写文件描述_详解Java中的File文件类以及FileDescriptor文件描述类
  13. 学习笔记(109):R语言入门基础-text函数
  14. dhcp服务器修改网关地址,5.1.9 配置DHCP客户端网关地址
  15. 纯c++读取与显示BMP图片
  16. 独步天下的创业历险记6-一叶知秋
  17. 解决div高度不自动增加的问题
  18. bzoj2708木偶(dp)
  19. 随机森林算法学习(RandomForest)
  20. 北京天宇联科技有限责任公司-T语言中html页面keys键值的设置

热门文章

  1. 忠实履行职责,成就辉煌人生 ——读《西点军校的经典法则》有感
  2. mysql连接服务器教程_连接 MySQL 服务器
  3. win 7计算机图标变了,Win7美化攻略:替换imageres.dll,图标全变样
  4. 联想启天M5710不开机,开机后卡logo
  5. 微信小程序获取用户手机号异常的问题解决
  6. 目前我国网络安全人才市场状况
  7. 联想重装系统去掉保护_联想硬盘保护系统,小编告诉你联想硬盘保护系统怎么安装...
  8. java 类中 serialversionuid 作用
  9. 计算机组装与维修要学哪些,计算机组装与维修教学基本要求
  10. 联想 ThinkPad E450 进入 BIOS