注入Spring-oc依存性,逆転DI制御


依存注入


オブジェクトを直接作成するのではなく、注入を受け入れて使用します.
依存性注入を受け入れない
public class Toy {
    private Battery battery;

    public Toy() {
        Battery battery = new Battery();
        this.battery = battery;
    }
}
ToyというクラスはBatteryクラスに強く依存している.
依存性注入を受け入れる
<java code>

public class Toy {
    private Battery battery;

    public Toy(Battery battery) {
        this.battery = battery;
    }
}
<spring code>
public class Toy {
    @Autowired
    private Battery battery;
}

@Component
public class Battery {
    ...
}
Toyクラスはオブジェクトを直接作成するのではなく、外部からオブジェクトを注入します.
@RequiredArgsConstructorを使用して作成者に注入
// 서비스 클래스
@Service
@RequiredArgsConstructor
public class OrderService {
    private final OrderRepository orderRepository;

    public void doSomething() {
        orderRepository.doSomething();
    }
}

// 레포지토리 클래스
@Repository
public class OrderRepository {

    public void doSomething() {
        System.out.println("this is Repository");
    }
}

// 테스트 클래스
@SpringBootTest
public class DiTest {

    @Autowired
    private OrderService orderService2;

    @Test
    public void test() {
        OrderRepository orderRepository = new OrderRepository();
        OrderService orderService = new OrderService(orderRepository);
        orderService.doSomething();
    }

    @Test
    public void test2() {
        orderService2.doSomething();
    }
}


結果

せいぎょはんてん


すべての制御権限は、自分ではなく別のオブジェクト(Spring)に委任されます.
オブジェクトは自分で使用するオブジェクトを作成したり、どこで作成されたのか分からない.すべての制御権限が自分ではなく他のオブジェクトに委任されるため、オブジェクト間の結合度が低下し、コードの柔軟性が向上します.