- IoC
- 의존관계 : 객체가 다른 객체와 상호 작용하는 경우를 객체의 의존 관계라고 한다.
- DI: 객체간의 의존 관계를 생성자 인수(constructor argument)나 setter method arguments로 명시하고, 객체를 생성할 때 생성자나 세터를 통해 의존 관계를 주입하는 방식을 따르는 디자인 패턴이다.
- 스프링 IoC 컨테이너는 스프링 애플리케이션에서 존재하는 객체를 생성하고, 의존 관계를 주입하는 일을 담당한다.
- 여기서 스프링 컨테이너가 생성하고 관리하는 애플리케이션 객체들을 빈(bean)이라고 한다. -> 스프링 컨테이너는 애플리케이션을 조합하기 위해 Factory나 Service locator등의 디자인 패턴을 직접 구현할 필요가 없다.
- 의존 관계를 만들고 주입하는 책임은 애플리케이션의 객체가 아닌 스프링 컨테이너에 있기 때문에 DI를 IoC(제어의 역전) 이라고도 부른다. * 일반 형태처럼 new를 사용해서 handling 하는 것이 아니다.
- 스프링 컨테이너가 애플리케이션 객체에 추가 기능을 부여하고 애플리케이션 객체를 평범한 자바 객체 POJO(Plain Old Java Object)로 모델링할 수 있다.
- POJO 클래스는 프레임워크가 지정하는 인터페이스나 클래스를 구현/ 확장하지 않는 자바 클래스..
=> 스프링은 객체 생성과 의존관계 주입을 처리함으로써 자바 애플리케이션 조합을 쉽게 만들어준다.
- Spring bean
- 이전방식
DBService service = new DBService();
- spring 방식
* 스프링 환경에서 작성한 클래스: 빈(bean)
: xml에 빈을 등록해서 사용한다.
-> test.xml에 bean을 등록함
//test.xml 파일을 IoC Container에 설정
// IoC Container의 실제 API ApplicationContext
GenericXmlApplicationContext ctx =
new GenericXmlApplicationContext("com/config/test.xml");
//Bean 얻기
DBService service2 = ctx.getBean("xyz",DBService.class);
System.out.println(service2.getInfo());
test.xml에 빈을 등록하고, 빈을 가져오기 위해 GenericXmlApplicationContext를 이용하여 설정한다.
이후 이를 이용하여 빈을 얻어오는 과정인 것 같다.
- 생성자 주입방식
- 생성자를 이용해 의존 관계 주입
public class MyService {
public String name;
public int age;
public MyService() {
}
public MyService(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
- constructor-arg: 생성자에게 인수를 넘기거나 정적 팩토리 메서드/ 인스턴트 팩토리 메서드에 인수를 넘길때 사용
-> 생성자 주입방식에서 인수들은 constructor-arg를 사용해 등록한다.
<bean id="aaa" class="com.service.MyService">
<constructor-arg name="name" value="이순신"/>
<constructor-arg name="age" value="40"/>
</bean>
- setter 주입방식
- setter method를 이용해 의존 관계 주입
public class DBService {
//변수, property
public String name;
public DBService() {
System.out.println("DBService 생성자");
}
//setter- based injection
public void setName(String name) {
System.out.println("setName 메서드");
this.name = name;
}
}
- property: setter메소드를 통해 의존 관계가 있는 bean을 주입할때, <property>태그 사용 가능
- ref 속성: Bean이름을 이용해 주입할 Bean을 찾는다.
- value 속성: 단순 값 또는 Bean이 아닌 객체를 주입할 때 사용
1) dbDAO 빈을 이용
: DBDao 빈을 먼저 등록하고 해당 빈을 이용함
<bean id="dbDao" class="com.dao.DBDao"/>
<bean id="dbService" class="com.service.DBService">
<property name="dao" ref="dbDao"/>
</bean>
2) 바로 사용...? 중간에 dbdao같은거 없음
<!-- setter 주입방법 -->
<bean id="aaa" class="com.service.MyService">
<property name="name" value="이순신"></property>
<property name="age" value="40"></property>
</bean>
-
- myBatis 연동
- mybatis..
'신입사원 입문교육_정리' 카테고리의 다른 글
web & spring 정리 (0) | 2021.02.16 |
---|---|
Spring Framework - Day2 (0) | 2021.02.08 |
Web - JSP / Servlet / JS / Java - Day1 (0) | 2021.02.01 |
sql oracle Day3 (0) | 2021.01.28 |
workshop 3 (0) | 2021.01.27 |