Spring随笔

内容来自Spring实战第四版,对Spring的一些总结

Spring框架目的:简化java开发

  • 基于POJO的轻量级和最⼩侵⼊性编程; 通过依赖注⼊和⾯向接⼝实现松耦合; 基于切⾯和惯例进⾏声明式编程; 通过切⾯和模板减少样板式代码。

DI

对象的依赖关系将由系统中负责协调各对象的第三⽅组件在创建对象的时候进⾏设定。对象⽆需⾃⾏创建或管理它们的依赖关系;依赖关系将被⾃动注⼊到需要它们的对象当中去
依赖注入方式:构造器注⼊(constructor injection)setter注入 基于注解的注入
依赖注入
耦合具有两⾯性(two-headed beast)

  1. ⼀⽅⾯,紧密耦合的代码难以测试、难以复⽤、难以理解,并且典型地表现出“打地⿏”式的bug特性(修复⼀个bug,将会出现⼀个或者更多新的bug)。
  2. 另⼀⽅⾯,⼀定程度的耦合⼜是必须的——完全没有耦合的代码什么也做不了。为了完成有实际意义的功能,不同的类必须以适当的⽅式进⾏交互。
    总⽽⾔之,耦合是必须的,但应当被⼩⼼谨慎地管理。

创建应⽤组件之间协作的⾏为通常称为装配(wiring)Spring有多种装配bean的⽅式:采⽤XML装配(常用)使⽤Java描述配置

切面 AOP

好多人都说DI和AOP本就是一回事,但从Spring实战这本书看,他更倾向于是通过注入(DI)实现了切面编程(AOP);AOP本身更像是一种思想而不是技术,允许将系统的各个功能分离出形成重用的组件
分离前
分离前
分离后
分离后
AOP优点:将这些服务模块化,并以声明的⽅式将它们应⽤到它们需要影响的组件中去。使得组件会具有更⾼的内聚性并且会更加关注⾃⾝的业务,完全不需要了解涉及系统服务所带来复杂性。确保了POJO的简单性

在这里插入图片描述

模版简化

在传统开发中,很多功能模块的代码难免重复出现,比如连接JDBC,核心代码其实就只有相当少一部分,模板代码占有了相当大的比重;Spring旨在通过模板封装来消除样板式代码。Spring的JdbcTemplate使得执⾏数据库操作时,避免传统的JDBC样板代码成为了可能。

applicationContext & BeanFactory区别

容器是Spring框架的核⼼。Spring容器使⽤DI管理构成应⽤的组件,它会创建相互协作的组件之间的关联Spring⾃带了多个容器实现,可以归为两种不同的类型:

  • bean⼯⼚(由org.springframework.beans.factory.BeanFactory接⼝定义)是最简单的容器,提供基本的DI⽀持。
  • 应⽤上下⽂(由org.springframework.context.ApplicationContext接⼝定义)基于BeanFactory构建,并提供应⽤框架级别的服务,例如从属性⽂件解析⽂本信息以及发布应⽤事件给感兴趣的事件监听者

Bean

被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的。bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象。
Spring从两个⾓度来实现⾃动化装配Bean:

  • 组件扫描(component scanning):Spring会⾃动发现应⽤上下⽂中所创建的bean。
  • ⾃动装配(autowiring):Spring⾃动满⾜bean之间的依赖。

Bean的生命周期

传统的Java应⽤中,bean的⽣命周期很简单。使⽤Java关键字new进⾏bean实例化,然后该bean就可以使⽤了。⼀旦该bean不再被使⽤,则由Java⾃动进⾏垃圾回收

  • 实例化 Instantiation
  • 属性赋值 Populate
  • 初始化 Initialization
  • 销毁 Destruction
    实例化 -> 属性赋值 -> 初始化 -> 销毁
    Bean的生命周期

Bean的装配

Spring具有⾮常⼤的灵活性,它提供了三种主要的装配机制:

  • 在XML中进⾏显式配置
  • 在Java中进⾏显式配置
  • 隐式的bean发现机制和⾃动装配

Spring从两个⾓度来实现自动化装配

  • 组件扫描(component scanning):Spring会⾃动发现应⽤上下⽂中所创建的bean
  • ⾃动装配(autowiring):Spring⾃动满⾜bean之间的依赖

Spring模块

模块分类

  • Spring核心容器
    管理着Spring应⽤中bean的创建、配置和管理。在该模块中,包括了Spring bean⼯⼚,它为Spring提供了DI的功能。基于bean⼯⼚,我们还会发现有多种Spring应⽤上下⽂的实现,每⼀种都提供了配置Spring的不同⽅式
  • Spring的AOP模块
    在AOP模块中,Spring对⾯向切⾯编程提供了丰富的⽀持。这个模块是Spring应⽤系统中开发切⾯的基础。与DI⼀样,AOP可以帮助应⽤对象解耦。借助于AOP,可以将遍布系统的关注点(例如事务和安全)从它们所应⽤的对象中解耦出来。
    -数据访问与集成
    使⽤JDBC编写代码通常会导致⼤量的样板式代码,例如获得数据库连接、创建语句、处理结果集到最后关闭数据库连接。Spring的JDBC和DAO(Data Access Object)模块抽象了这些样板式代码,使我们的数据库代码变得简单明了,还可以避免因为关闭数据库资源失败引发的问题。
  • Web与远程调⽤
    MVC(Model-View-Controller)模式是⼀种普遍被接受的构建Web应⽤的⽅法,它可以帮助⽤户将界⾯逻辑与应⽤逻辑分离。Java从来不缺少MVC框架,Apache的Struts、JSF、WebWork和Tapestry都是可选的最流⾏的MVC框架
  • Instrumentation
    Spring的Instrumentation模块提供了为JVM添加代理(agent)的功能。具体来讲,它为Tomcat提供了⼀个织⼊代理,能够为Tomcat传递类⽂件,就像这些⽂件是被类加载器加载的⼀样
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值