注入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)に委任されます.
オブジェクトは自分で使用するオブジェクトを作成したり、どこで作成されたのか分からない.すべての制御権限が自分ではなく他のオブジェクトに委任されるため、オブジェクト間の結合度が低下し、コードの柔軟性が向上します.
Reference
この問題について(注入Spring-oc依存性,逆転DI制御), 我々は、より多くの情報をここで見つけました https://velog.io/@kjw4840/Spring-Ioc-의존성-주입-DI-제어의-역전テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol