IOC容器设计学习

ylxn / 2024-02-19 / 原文

Spring简介:

  • 以IOC与AOP为内核。分层框架。轻量级(不需要依赖其他软件,只需要JVM,容器环境)

Spring 的核心结构

每个模块对应一个Jar包。

 

1.4 IOC思想讲解

IOC和AOP不是Spring提出的。spring在技术上很好的把这两个思想实现

1)什么是IoC

Inversion of Control. (控制反转),这是一个技术思想。

描述的事情:Java开发领域对象创建的管理问题:

传统:A依赖B,会在A中new一个 B。

IoC思想的开发方式:不用自己new 对象了,由IoC容器帮助我们实例化对象,并且管理,我们需要使用哪个对象,去跟IoC容器要

我们丧失了创建管理对象的能力,得到了福利(不用考虑对象创建、管理和一系列事情)

 

控制:指的是对象穿件(实例化)的权利

反转:控制权交给外部,(Spring框架,IoC容器)

 

 

2)IoC解决了什么问题

 解决了对象之间的耦合问题

如果DaoImpl改了名字,则左侧两处代码都要改。

 

改进:

 

3)IoC和DI的区别

 IoC和DI。

IoC和DI描述的是一件事情。(对象实例化及依赖关系维护),只不过角度不同。
IOC: 站在对象角度,对象实例化以及管理权力交给了容器
DI:站在容器角度。容器会把依赖的其他对象注入
 
 

1.6 AOP编程思想

1)什么是AOP?
Aspect Oriented Programming。面向切面编程
AOP是OOP的延续。
 

 

OOP思想可以解决大多数代码重复问题,但是有一些是处理不了的,假如需要加入性能监控
public class Animal {
    public void eat(){
        long startTime = System.currentTimeMillis();
        long endTime = System.currentTimeMillis();
    }

    public void run(){
        long startTime = System.currentTimeMillis();
        long endTime = System.currentTimeMillis();
    }
}

 

横切逻辑代码使用场景有限:事务控制、权限校验、日志打印

 

 横切代码存在的问题:

  • 横切代码重复
  • 入侵业务逻辑

AOP解决,在不改变原有业务逻辑情况下,增强横切逻辑代码,避免代码重复

 

为什么叫面向切面编程:

原有业务代码不能动,只能操作横切逻辑代码。所以是面向横切逻辑

面:横切逻辑影响很多方法,每一个方法是一个点,组在一起是个面

 

 

1.7