스프링 코어 및 디자인 아이디어

기사 디렉토리:

              1. 봄의 의미

               2. IOC란?

               3. DI란?

               4. IOC와 DI의 차이점

1. 스프링이란?

     Spring은 많은 메소드와 도구를 포함하는 IOC 컨테이너입니다.

2. IOC란?

IOC는 Inversion of Control(즉, Inversion of Control)을 의미합니다. 다음은 Inversion of Control이 무엇을 의미하는지 이해하기 위한 자세한 예입니다. 우리는 자동차에 차체, 섀시 및 타이어가 있음을 알고 있습니다. 의존성.

자동차를 만들려면 차는 차체에 의존하고, 차체는 차체에 의존하고, 차체는 타이어에 의존합니다.이들 사이의 관계를 코드로 표현해 봅시다.

public class Car {
    public Framework framework;
    public Car()
    {
        framework=new Framework();

    }
    public void say()
    {
        System.out.println("这是车");
        framework.say();
    }
}
public class Framework {
    public Bottom bottom;
    public Framework()
    {
        bottom=new Bottom();
    }
    public void say()
    {
        System.out.println("这是车身");
        bottom.say();
    }

}
public class Bottom {
    public Tire tire;
    public Bottom()
    {
        tire=new Tire();
    }
    public void say()
    {
        System.out.println("这是车底盘");
        tire.say();
    }
}
public class Tire {
    
    public void say()
    {
        System.out.println("这是车轮胎");
    }
}
public class Text {
    public static void main(String[] args) {
        Car car=new Car();
        car.say();
    }
}

  

 코드에서 우리는 다른 클래스에 의존해야 하는 클래스가 클래스에서 이 클래스를 인스턴스화해야 하고 이 클래스 개체의 생성 및 사용을 담당한다는 것을 알 수 있습니다. 상사가 부하를 만들고 관리하는데 사실 큰 문제가 있는데 사용자마다 타이어에 대한 다른 크기 요구 사항을 부여한 다음 인쇄하려면 Tire 클래스의 코드를 변경해야 합니다.

public class Tire {
    public int size;
    public Tire(int size)
    {
        this.size=size;

    }

    public void say()
    {
        System.out.println("这是车轮胎"+"车轮胎大小为:"+size);
    }
}

그러면 Tire 생성 방식의 size 변수는 이 매개변수를 전달하기 위해 Bootom 클래스가 필요하고, 마찬가지로 Framework도 Bootom에 매개변수를 전달해야 하며 코드는 다음과 같이 수정됩니다.

public class Text {
    public static void main(String[] args) {
        Car car=new Car(10);
        car.say();
    }
}
public class Car {
    public Framework framework;
    public Car(int size)
    {
        framework=new Framework(size);

    }
    public void say()
    {
        System.out.println("这是车");
        framework.say();
    }
}
public class Framework {
    public Bottom bottom;
    public Framework(int size)
    {
        bottom=new Bottom(size);
    }
    public void say()
    {
        System.out.println("这是车身");
        bottom.say();
    }

}
public class Bottom {
    public Tire tire;
    public Bottom(int size)
    {
        tire=new Tire(size);
    }
    public void say()
    {
        System.out.println("这是车底盘");
        tire.say();
    }
}
public class Tire {
    public int size;
    public Tire(int size)
    {
        this.size=size;

    }

    public void say()
    {
        System.out.println("这是车轮胎"+"车轮胎大小为:"+size);
    }
}

이 코드를 보면 Tire 클래스 구성 방식의 클래스가 변경되면 그 상위 클래스도 변경되어야 하고 결합력이 강하다는 것을 알 수 있는데, 이 문제를 해결할 수 있는 방법은 없을까요? 이것은 제어권의 반전을 수반하는데, 상위 호출자는 더 이상 이 클래스를 생성하지 않고, 더 이상 이 클래스를 인스턴스화하지 않고 사용만 하고, Spring 컨테이너에 생성 및 관리 권한을 넘겨주고 이 클래스만 사용한다. 이 코드가 어떻게 작성되었는지 살펴보겠습니다.

public class Text2 {
    public static void main(String[] args) {
        Tire tire=new Tire(5);
        Bottom bottom=new Bottom(tire);
        Framework framework=new Framework(bottom);
        Car car=new Car(framework);
        car.say();
    }
}
public class Car {
    public Framework framework;
    public Car(Framework framework)
    {
        this.framework=framework;

    }
    public void say()
    {
        System.out.println("这是车");
        framework.say();
    }
}
public class Bottom {
    public Tire tire;
    public Bottom(Tire tire)
    {
        this.tire=tire;
    }
    public void say()
    {
        System.out.println("这是车底盘");
        tire.say();
    }
}
public class Tire {
    public int size;
    public Tire(int size)
    {
        this.size=size;

    }
    public void say()
    {
        System.out.println("这是车轮胎"+size);

    }


}

 

위의 코드에서 우리는 Tire 클래스를 수정할 때 상위 호출 클래스를 수정할 필요가 없으며 생성을 담당하는 Text2 클래스가 해당 수정을 할 수 있음을 알 수 있습니다. 생성 순서가 변경되었습니다.

이를 통해 우리는 IOC가 제어의 역전을 의미하는 안내 이데올로기이며, 더 이상 상위 객체에 의해 생성되고 관리되는 것이 아니라 생성 및 관리와 제어를 담당하는 Spring 컨테이너에 넘겨진다는 것을 알게 되었습니다. 컨테이너 위로.

Spring 컨테이너는 컨테이너이기 때문에 객체에 접근하는 기능도 있고, Bean 객체를 저장하고 Bean 객체를 가져오는 기능도 있으며, Spring 컨테이너에 Bean 객체를 넣으면 생성하지 않고 필요에 따라 가져올 수 있다. 효율성을 크게 향상시키는 새로운 객체

3. DI란?

DI는 의존성 주입(Dependency Injection)으로, 현재 클래스에 의존성을 주입하고 현재 클래스에 의존성을 필요로 하는 객체를 주입하는 것을 말하며, 이 작업은 호출자가 아닌 스프링 컨테이너에 의해 수행됩니다.

4. DI와 IOC의 차이점

DI와 IOC는 기본적으로 동일한 개념을 다른 관점에서 설명하지만 IOC는 지침 이념이고 DI는 실천입니다.

 

 

 

 

 

 

Supongo que te gusta

Origin blog.csdn.net/m0_70386582/article/details/130052182
Recomendado
Clasificación