신입사원 입문교육_정리

Spring Framework - Day1

FireStone 2021. 2. 2. 23:54
  •   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