Spring-IoC,AOP基础-20200504

Spring概述

Spring简介

Spring 是分层的 full-stack(全栈) 轻量级开源框架,以 IoC 和 AOP 为内核,提供了展现层 SpringMVC 和业务层事务管理等众多的企业级应⽤技术,还能整合开源世界众多著名的第三⽅框架和类库,已经成为使⽤最多的JavaEE 企业应⽤开源框架。

Spring核心结构

Spring是⼀个分层⾮常清晰并且依赖关系、职责定位⾮常明确的轻量级框架,主要包括⼏个⼤模块:数据处理模块、Web模块、AOP(Aspect Oriented Programming)/Aspects模块、Core Container模块和 Test 模块,如下图所示,Spring依靠这些基本模块,实现了⼀个令⼈愉悦的融合了现有解决⽅案的零侵⼊的轻量级框架。
在这里插入图片描述
Spring中最核心的就是IoC和AOP

IoC思想

基本概念

  • IoC:Inversion of Control,控制反转,它是一种思想,而不是一种具体的技术实现

    • 控制:对象创建,也就是实例化以及管理的权利
    • 反转:控制权交给外部环境了(Spring框架,IoC容器)
  • 主要描述的是JAVA开发领域,对象创建和管理的问题

思想解释

  • 举例说明:
    传统开发⽅式:⽐如类A依赖于类B,往往会在类A中new⼀个B的对象
    在这里插入图片描述
    IoC思想下开发⽅式:我们不⽤⾃⼰去new对象了,⽽是由IoC容器(Spring框架)去帮助我们实例化对象并且管理它,我们需要使⽤哪个对象,去问IoC容器要即可
    在这里插入图片描述

我们丧失了⼀个权利(创建、管理对象的权利),得到了⼀个福利(不⽤考虑对象的创建、管理等⼀系列事情)

IoC最终解决的是对象之间耦合的问题

IoC与DI的区别

DI的基本概念

  • DI:Dependancy Injection(依赖注⼊)
  • 其实DI和IoC描述的是同一件事情(对象的实例化,管理,及依赖关系维护这件事情),只是角度不同。IoC是站在对象角度来说的,对象的控制权被反转了,反转交给了IoC容器;而DI是站在IoC容器角度来说的,容器会把被依赖对象,注入(通俗的说就是“送进去”)到依赖它的对象中去。
    在这里插入图片描述

AOP

AOP的基本概念

  • AOP: Aspect oriented Programming ⾯向切⾯编程/⾯向⽅⾯编程

AOP要解决的问题

  • 横切逻辑
    看一段代码:在这里插入图片描述
    在上面的eat和run方法中,都有各自的业务逻辑,但是如果我们要加入一个性能统计的功能,就会在多个方法中出现重复的代码,并且OOP下几乎无法解决这个问题。
    在这里插入图片描述
    这种在多个纵向流程中出现了相同的子流程的代码,称之为横切逻辑代码。
    AOP就是要解决横切逻辑代码抽取的问题。将横切逻辑代码与真正的业务逻辑代码分离:
    在这里插入图片描述
    在不改变原有业务逻辑情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复。

怎么理解“面向切面”

  • 切:指的是横切逻辑,真正逻辑代码无法处理,只能处理横切逻辑,所以叫面向横切逻辑。
  • 面:横切逻辑往往在多个方法中出现,每一个出现的地方好比一个点,多个点就组成了面。
Spring-IOCSpring框架的核心部分之一,它是一种设计模式,全称为Inversion of Control(控制反转)。它通过将对象的创建、依赖关系的管理和对象的生命周期交给Spring容器来实现,从而降低了组件之间的耦合度,提高了代码的可重用性和可维护性。Spring-IOC的实现主要依靠Spring容器,Spring容器是Spring框架的核心,它负责创建、管理和装配Bean对象,其中Bean是Spring框架中最基本的组件。 Spring-IOC的实现主要有两种方式:BeanFactory和ApplicationContext。其中,BeanFactory是Spring-IOC的基本实现,而ApplicationContext是BeanFactory的子接口,提供了更多高级特性。ApplicationContext是Spring框架中最常用的IOC容器,它除了提供BeanFactory的所有功能外,还提供了更多的企业级特性,例如AOP、事务管理、国际化、事件传播等。 下面是一个简单的Spring-IOC的例子,假设我们有一个UserService接口和一个UserServiceImpl实现类,我们可以通过Spring-IOC容器来创建和管理UserServiceImpl对象: 1.定义UserService接口和UserServiceImpl实现类 ```java public interface UserService { void addUser(User user); } @Service public class UserServiceImpl implements UserService { @Override public void addUser(User user) { // 添加用户的具体实现 } } ``` 2.在Spring配置文件中配置UserService实例 ```xml <bean id="userService" class="com.example.service.UserServiceImpl"/> ``` 3.在代码中获取UserService实例并使用 ```java ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService = context.getBean("userService", UserService.class); User user = new User(); userService.addUser(user); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值