- 일반적인 프로그래밍에서, 프로그램의 제어 흐름 구조가 뒤바뀌는 것을 의미한다.
- 프로그래머가 작성한 프로그램이 재사용 라이브러리의 흐름 제어를 받게 되는 프로그래밍 원칙이다.
- 객체의 생성과 관리, 객체간의 의존성 처리 등을 프레임워크에서 대신 처리해주는 것이 대표적인 예이다.
Srping Framework의 IoC Container 👉 "Application Context"
Spring은 Bean을 생성하고, 초기화하고, 의존성 주입하고, 제거하는 등의 일을 IoC Container를 통해 자동으로 처리할 수 있다.
Bean을 등록, 생성, 조회, 반환 관리하는 기능 (BeanFactory를 확장한 IoC Container)
스프링의 각종 부가 기능을 추가로 제공한다.
✔️ 공통적으로 사용할 PersonDTO
@Data
@AllArgsConstructor
public class PersonDTO {
private String name
private int age
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="person" class="com.common.PersonDTO">
<constructor-arg name="name" value="llocr"/>
<constructor-arg name="age" value="23"/>
</bean>
</beans>
public class Application {
public static void main(String[] args) {
ApplicationContext context = new GenericXmlApplicationContext("section01/xmlconfig/spring-context.xml");
PersonDTO person = context.getBean("person", PersonDTO.class);
System.out.println(person);
}
java class를 만들어서 Bean을 등록한다.
@Configuration
public class ContextConfiguration {
@Bean(name = "person") //Bean의 이름 지정, 지정하지 않으면 Bean의 이름이 '메소드의 이름'으로 정의됨
public PersonDTO getHuman() {
return new HumanDTO("박지성", 22);
}
public class Application {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(ContextConfiguration.class);
PersonDTO person = context.getBean("person", PersonDTO.class);
System.out.println(person);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.section03"/>
</beans>
@Component
public class PersonService {
private final PersonDTO person;
public PersonService() {
person = new PersonDTO("홍길동", 20);
}
}
public class Application {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(PersonService.class);
PersonService personService = context.getBean("personService", PersonService.class);
@Component
public class PersonService {
private final PersonDTO person;
public PersonService() {
person = new PersonDTO("홍길동", 20);
}
}
@Configuration
@ComponentScan(basePackages="com.section03")
public class ContextConfiguration{}
public class Application {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(ContextConfiguration.class);
PersonDTO person = context.getBean("person", PersonDTO.class);
System.out.println(person);
}
}