Spring框架

Spring框架中的IOC与AOP

一、Spring框架简介

Spring是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性。Spring 官网:spring官网
我们一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是:核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块。比如:Core Container 中的 Core 组件是Spring 所有组件的核心,Beans 组件和 Context 组件是实现IOC和依赖注入的基础,AOP组件用来实现面向切面编程。
Spring 官网列出的 Spring 的 6 个特征:
核心技术 :依赖注入(DI),AOP,事件(events),资源,i18n,验证,数据绑定,类型转换,SpEL。
测试 :模拟对象,TestContext框架,Spring MVC 测试,WebTestClient。
数据访问 :事务,DAO支持,JDBC,ORM,编组XML。
Web支持 : Spring MVC和Spring WebFlux Web框架。
集成 :远程处理,JMS,JCA,JMX,电子邮件,任务,调度,缓存。
语言 :Kotlin,Groovy,动态语言。

在这里插入图片描述
Spring Core: 基础,可以说 Spring 其他所有的功能都需要依赖于该类库。主要提供 IoC 依赖注入功能。
Spring Aspects :该模块为与AspectJ的集成提供支持。
Spring AOP :提供了面向切面的编程实现。
Spring JDBC : Java数据库连接。
Spring JMS :Java消息服务。
Spring ORM : 用于支持Hibernate等ORM工具。
Spring Web : 为创建Web应用程序提供支持。
Spring Test : 提供了对 JUnit 和 TestNG 测试的支持。

二、Spring IOC的基本概念和IOC容器设计

IoC(Inverse of Control:控制反转)是一种设计思想,就是 将原本在程序中手动创建对象的控制权,交由Spring框架来管理。 IoC 在其他语言中也有应用,并非 Spirng 特有。 IoC 容器是 Spring 用来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象。将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。 IoC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。 在实际项目中一个 Service 类可能有几百甚至上千个类作为它的底层,假如我们需要实例化这个 Service,你可能要每次都要搞清这个 Service 所有底层类的构造函数,这可能会把人逼疯。如果利用 IoC 的话,你只需要配置好,然后在需要的地方引用就行了,这大大增加了项目的可维护性且降低了开发难度。
Spring 时代我们一般通过 XML 文件来配置 Bean,后来开发人员觉得 XML 文件来配置不太好,于是 SpringBoot 注解配置就慢慢开始流行起来。
实现控制反转的是Spring IOC容器,Spring IOC容器的设计主要是基于BeanFactory和ApplicationContext两个接口在spring中实现IOC容器的方法是依赖注入,依赖注入的作用是在使用spring框架创建对象时将其所依赖的对象注入到bean组件中。Spring框架的依赖注入通常有两种实现方法,一种是构造方法注入,一种是使用属性的setter方法注入。
Spring框架实例化Bean有3种方法,即构造方法实例化(常用)、静态工厂实例化和实例化工厂实例化
Bean的装配方式有:基于XML配置的装配和基于注解的装配
@Component:该注解是一个泛化的概念,仅仅表示一个组件对象,可以作用在任何层次上
@Repository:用于注解数据访问层的Bean,其功能与@Component相同
@Service:用于标注一个业务逻辑组件类(Service层)
@Controller:用于标注一个控制器组件类
@Autowired:该注解可以对类成员变量、方法及构造方法进行标注,完成自动装配的工作。
@Qualifier:该注解与@Autowired配合使用,当@Autowired注解需要按照名称来装配注入时需要和该注解一起使用。

三、Spring AOP的概念

AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。
Spring AOP就是基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候Spring AOP会使用Cglib ,这时候Spring AOP会使用 Cglib 生成一个被代理对象的子类来作为代理,如下图所示:
在这里插入图片描述
AOP的术语:
切面:切面是指封装横切到系统功能的类
连接点:连接点是指程序运行中的一些时间点,例如方法的调用和异常的抛出
切入点:切入点是指需要处理的连接点,切入点是一个描述信息,它修饰的是连接点
通知:通知是由切面添加到特定的连接点的一段代码
引入:允许在现有的实现类中添加自定义的方法和属性
目标对象:是指所有被通知的对象
代理:是通知应用到目标对象之后被动态创建的对象
织入:将切面代码插入到目标对象上,从而生成代理对象的过程。
Spring AOP 中的代理:JDK动态代理和CGLIB动态代理
使用ASpect J开发AOP:基于XML配置开发和基于注解形式的开发
Spring JDBC模块是由4个包组成:分别是core、datasource、Object和support包
Spring JdbcTemplate常用方法:
1、execute(String sql)用于执行sql语句
2、update()用于执行插入、更新和删除操作
3、query()用于执行数据库的查询操作
Spring管理事务的方式:编程式事务管理和声明式事务管理
编程式事务管理所依赖的核心接口:PlatformTransactionManager(spring提供的平台事务管理器,主要用于管理事务)、TransactionDefinition(该接口是事务描述的对象,该对象中定义了事务规则,并提供了获取事务相关信息的方法)、TransactionStatus(描述了某些时间点上事务的状态信息)
声明式事务管理又分为:基于XML的声明式事务和基于注解的声明式事务管理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值