当前位置:金沙js333娱乐场 > 网络频道 > 用大白话说Spring的IOC,DI,大白springiocdi

用大白话说Spring的IOC,DI,大白springiocdi

文章作者:网络频道 上传时间:2019-10-11

用大白话说Spring的IOC,DI,大白springiocdi

IOC(Inverse of  Control)控制反转

Java即生活,鄙人的感悟. ---------好比我们需要租房.现在我们房源不需要找到某个具体的房东(new fangdong() 房东对象才能租他的房 fangdong.rent()).如果我们对这个房东的房源不满意,离地铁太远了.....heh.我们还需要找下个房东new下个房东.IOC容器就像个中介,他手里有很多房源.而我们只要通过这个中介第三方,就可以选到合适的房源.中介的存在减少了你和房东之间的耦合度.中介增加了你的容错性,

IOC底层实现:工厂设计模式+放射+配置文件;

图片 1

图片 2

DI(Dependency Injection)依赖注入

只有被Spring管理的javabean(通过ioc得到对象)才有依赖注入(自己创建的对象不能依赖注入)

依赖注入可以所说是IOC的一种特殊实现。上面我们实现了类与类的耦合关系。但是获取对象的时候还需要创建spring工厂。DI可以动态的将依赖对象注入bean组件中。

图片 3

图片 4

 

http://www.bkjia.com/Javabc/1216414.htmlwww.bkjia.comtruehttp://www.bkjia.com/Javabc/1216414.htmlTechArticle用大白话说Spring的IOC,DI,大白springiocdi IOC(Inverse of Control)控制反转 Java即生活,鄙人的感悟. ---------好比我们需要租房.现在我们房源不需要找...

6.测试类:

import bean.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AnimalConfig.class)
public class AppTest {

    @Autowired
    private AnimalProxy animalProxy;

    @Test
    public void testBeanLoad(){
        animalProxy.sayName();
    }
}

说明:

  • 注解Component:指明该类为bean类
  • 注解Primary:指明当多个bean对象满足获取条件时候,该对象优选获取。
  • 注解Configuration:指明该类为spring bean定义类。
  • 注解ComponentScan:开启当前目录下的bean注解扫描。
  • 注解EnableAspectJAutoProxy:启用aspectJauto代理。
  • 注解Autowired:该属性,spring自动载入。

总结,多人个人或多个类协助处理问题或实现某个功能,总得要找个领头的来管理这些关系吧。

3.Dog类

package bean;

import org.springframework.stereotype.Component;

@Component
public class Dog implements Animal {
    public void sayName() {
        System.out.println("this is dog");
    }
}

IOC容器存在价值及具象化

我们通过租房来具象化说明什么是IOC (Inversion of Control,控制反转)。

没有中介之前,我们是这么找房子的:

图片 5

传统找房子

我们需要,一个个去找每一个房子。如果找到合适的房子(比如房子3),我们还得自己取找房东、找房产局。如果我们满意的房子(比如 房子1),我们还得取找二房东。多累啊,我们不就是想找个房子住么,管他几房东。所以就有了房产中介。

图片 6

现代找房子

这下舒服多了。租房流程,就变成了,我把我找房子的需求提给中介,中介找到合适的房子给我。

这里,我们可以简单的对IOC与DI做个定义,以方便记忆和理解:

  • 开发者:我
  • 类:房子类型、房屋拥有者类型
  • Bean对象:房子、房东、房产局等等
  • IOC容器:房屋中介
  • IOC(Inversion Of Control 控制反转): 把找房子的权利(控制)交给中介(不是自己,所以叫反转)过程
  • DI(Dependency Injection 依赖注入):把找好合适的房子(依赖,中介已经处理了相关杂事)交给我的过程

Java是一门面向对象编程语言。Java应用本质上是若干对象其依赖关系的组合。

一句话,在java中,将对象的创建与对象的使用分离开,通过依赖注入(DI)的方式达到对象控制反转(IOC)的目的。原本需要自己做创建对象、维护各个对象关系,现在统一交给统一专业的人或服务处理。

创建对象等操作就是你对对象的控制权,把控制权交给三方,这就是 控制反转(IOC) 的意思。

当需要某个对象的时候,三方将合适的对象给你,这个就是 依赖注入(DI) 的意思。

图片 7

IOC具象化

主要类或接口uml图

图片 8

IOC容器接口设计图

ApplicationContext 扩展了BeanFactory后的结果,BeanFactory为bean对象的出生地。

2.Cat类

package bean;

import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;

@Primary
@Component
public class Cat implements Animal {

    public void sayName() {
        System.out.println("this is cat");
    }
}

bean的生命周期

图片 9

spring中bean生命周期.png

Bean的完整生命周期经历了各种方法调用,这些方法可以划分为以下几类:

  • Bean自身的方法:这个包括了Bean本身调用的方法和通过配置文件中<bean>的init-method和destroy-method指定的方法。
  • Bean级生命周期接口方法:这个包括了BeanNameAware、BeanFactoryAware、InitializingBean和DisposableBean这些接口的方法
  • 容器级生命周期接口方法:这个包括了InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 这两个接口实现,一般称它们的实现类为“后处理器”。
  • 工厂后处理器接口方法:这个包括了AspectJWeavingEnabler, ConfigurationClassPostProcessor, CustomAutowireConfigurer等等非常有用的工厂后处理器  接口的方法。工厂后处理器也是容器级的。在应用上下文装配配置文件之后立即调用。

概述

Spring的最终目的是简化应用开发。spring用于替代更加重量级的企业级java技术,如EJB(Enterprise JavaBean)。

为了降低Java开发的复杂度。spring采取了以下4中关键策略:

  • 基于POJO(Plain Ordinary Java Objects,实际上就是普通的java类)的轻量级和最小侵入式编程。
  • 通过依赖注入(DI, Dependency Injection)和面向接口编程实现松耦合。
  • 基于切面(AOP, Aspect Oriented Programming)和惯例(可以理解为默认配置、方式)进行声明式编程。
  • 通过切面和模板减少重复代码。

图片 10

ioc容器及其使用

本文由金沙js333娱乐场发布于网络频道,转载请注明出处:用大白话说Spring的IOC,DI,大白springiocdi

关键词: