Spring-IOC详解看不会你喷我

一、什么是IOC

IOC呢是spring的一种思想,他的英文名全称Inversion of Control,中文译为“控制反转”或“依赖注入”,是面向对象编程中的一种设计原则。这个思想的意义是什么呢?这种设计思想的核心是将原本由代码直接操控的对象的调用权交给第三方(如一个容器)来控制。大白话就是解耦代码,降低代码间的耦合度。

🌰例子

下面可以通过一个例子来理解ioc这个思想

①传统思想

假设你正在准备一顿晚餐,需要用到一些食材和烹饪工具。在传统的方式下,你可能会亲自去超市购买食材,回到家后自己切菜、炒菜,并使用锅碗瓢盆等烹饪工具。在这个过程中,你负责了对象的创建(购买食材和烹饪工具)和使用(切菜、炒菜)。

②IOC思想

然而,如果我们采用IOC思想,这个过程就会有所不同。你可以想象有一个“晚餐准备助手”的容器,这个容器负责为你提供所需的食材和烹饪工具,而你只需专注于如何使用这些资源来制作晚餐。具体来说,你只需要告诉“晚餐准备助手”你需要哪些食材和工具,然后它就会为你准备好一切。其实说呢IOC与接口有些相似,你放在一个容器里,拿的时候拿出来(这也叫做DI注入),放的时候直接放在容器里。你不再需要关心食材是从哪里买的,工具是如何得到的,只需关注如何使用它们来完成晚餐的制作直接使用就好了

在这个例子中,“晚餐准备助手”就相当于IOC容器,它负责对象的创建和管理,而你作为开发者,只需关注对象的使用。这就是IOC思想的核心:将对象的创建和管理权交给容器(这也叫做控制反转了,由本人控制对象的权利交给了容器),你只需要关系如何使用这些对象

①传统造汽车

下面我们再结合一个代码案例来模拟一个制造汽车的过程:

public class Main {
    public static void main(String[] args) {
        Car car = new Car(21);
        car.run();
    }
}
public class Car {
    private Framework framework;

    public Car(int size) {
        framework = new Framework(size);
        System.out.println("car init... ");
    }

    public void run() {
        System.out.println("car run....");
    }
}
public class Framework {
    private Bottom bottom;

    public Framework(int size) {
        bottom = new Bottom(size);
        System.out.println("framework init...");
    }
}
public class Bottom {
    private Tire tire;

    public Bottom(int size) {
        tire = new Tire(size);
        System.out.println("bottom init...");
    }
}
public class Tire {
    private int size;


    public Tire(int size) {
        System.out.println("tire size:"+size);
    }
}

这是一种很传统的造车方式自给自足,这种方式发现如果要修改添加一个参数就很麻烦需要更改多个地方(这就是高耦合性),我们的代码当然是要耦合度越低,才以便于后期更好维护啊。所以便有了IOC思想

②IOC造车

public class Car {
    private Framework framework;

    public Car(Framework framework) {
        this.framework = framework;
        System.out.println("car init...");
    }

    public void run() {
        System.out.println("car run...");
    }
}
public class Framework {
    private Bottom bottom;

    public Framework(Bottom bottom) {
        this.bottom = bottom;
        System.out.println("framework init...");
    }
}
public class Bottom {
    private Tire tire;

    public Bottom(Tire tire) {
        this.tire = tire;
        System.out.println("bottom init...");
    }

}
public class Tire {
    private int size;
    private String color;

    public Tire(int size,String color) {
        System.out.println("tire size:"+size+",color:"+color);
    }
}
public class Main {
    public static void main(String[] args) {
        Tire tire = new Tire(19,"red");
        Bottom bottom = new Bottom(tire);
        Framework framework = new Framework(bottom);
        Car car = new Car(framework);
        car.run();
    }
}

在这里你可以发现用IOC思想就可以极大程度的降低了耦合程度,造什么就用this给你什么不需要自己去new,而是交给了另一个容器去创建。

二、对象的存放

了解了IOC容器之后我们再来了解一下IOC是如何存取对象的吧

这就不得不提到五大注解:@Controller@Service@Repository@Component@Configuration只要被这五个注解标识的类就被放到ioc容器中了哦。

@Controller 

通常用于标记Spring MVC中的控制器类,负责处理HTTP请求和返回响应

@Controller  
public class MyController {  
    // ...  
}

@Service 

用于标记业务逻辑层的组件。

@Service  
public class MyService {  
    // ...  
}

@Repository 

通常用于标记数据访问层。如DAO类。Spring会为这些类创建代理,用于异常处理。

@Repository  
public class MyRepository {  
    // ...  
}

@Component

用于标记Spring管理的组件。任何被@Component注解的类都将被Spring容器管理,成为一个Spring Bean

@Component  
public class MyComponent {  
    // ...  
}

@Cofiguration

用于标记配置层的注解。

@Configuration
public class MyConfiguration{
  //...
}

关于IOC的注解就先分享到这里哦,DI(依赖注入)有更复杂的细节需要更详细的篇章讲解哦。

  • 22
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring-beans模块是Spring框架中最基础的模块之一,提供了BeanFactory和FactoryBean等Bean管理相关的类。在Spring中,Bean指的是被Spring IoC容器管理的对象,而BeanFactory则是管理Bean的工厂类,是Spring IoC容器的核心组件之一。 Spring-beans模块的主要功能如下: 1. BeanFactory:BeanFactory是Spring IoC容器的核心接口,提供了获取Bean、注册Bean和销毁Bean等方法。BeanFactory是Spring IoC容器的基础,包括DefaultListableBeanFactory、XmlBeanFactory等实现类。 2. FactoryBean:FactoryBean是一种特殊的Bean,可以通过实现FactoryBean接口来自定义Bean的创建过程。FactoryBean的作用是在Bean的实例化过程中添加一些逻辑,例如对Bean进行缓存、延迟初始化等操作。 3. BeanPostProcessor:BeanPostProcessor是Spring IoC容器提供的扩展点,可以在Bean的初始化过程中添加一些自定义的逻辑。BeanPostProcessor提供了两个方法:postProcessBeforeInitialization和postProcessAfterInitialization,分别在Bean的初始化前后执行。 4. BeanDefinition:BeanDefinition是Spring IoC容器中定义Bean的元数据,包括Bean的类型、属性、依赖关系等信息。BeanDefinition是Spring IoC容器管理Bean的基础,可以通过BeanDefinition来实现Bean的配置、管理和装配。 除了以上功能,Spring-beans模块还提供了很多其他的类和接口,如BeanWrapper、BeanNameAware、InitializingBean和DisposableBean等,用于实现Bean的属性注入、生命周期管理和销毁等操作。 总之,Spring-beans模块是Spring框架中最基础的模块之一,提供了Bean管理相关的类和接口,是Spring IoC容器的核心组件之一,使用Spring框架时必须引入该模块。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值