본문 바로가기

공부방/Spring

교육 1일차 정리

- BeanFactory는 기본적인 컨테이너 기능만 수행

- BeanFactory를 상속한 ApplicationContext를 실무에서는 사용

 

- <Bean id="aa" name="aa" > 일때 name 속성과  id 속성의 차이는 네이밍 교칙을 따르냐 마느냐의 차이이다. id는 자바의 네이밍 규칙을 따르므로 첫글자를 숫자로 한다거나 특수 문자를 지원하지 않지만 name 속성은 이러한 네이밍 규칙을 무시하고 사용가능하다. 기본적인 기능은 동일하다.

 

- applicationContext.xml 파일에 선언 되어 있는 bean들은 기본적으로 applicationContext 파일이

  ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml");

 메소드를 통해 초기화 되고나면 모두 메모리에 올라가게된다.

 

- 이때 tv = (TV)factory.getBean("samsung");  같이 bean 지정해 주게되면 메모리

 올라가있는 객체들 중에 해당되는 녀석을 찾아서 리턴해주게 되는데 이러한 방식이 lookup 방식이다.

 

- 이와 다르게 applicationContext.xml에 사용할 bean을 정의해놓고 내부에서 외부 정보를 바탕으로 객체를 생성하    

  게 하는 방식이 dependency injection(DI) 방식이다. 일반적으로 DI를 많이 사용한다.

 

- DI를 사용 하는 방식에는 생성자를 통한 방식과 Setter를 사용하는 방식이 있으며, 일반적으로 Setter를 사용한

  DI를 많이 사용한다.

 

 

- Bean Scope

   --> bean을 정의하고 scope 속성을 선언함에 있어서 default는 singleton 방식으로 지정이 되어 factory.getBean을 여러번 호출해도 메모리상에는 하나의 객체 생성되어 적용이 된다. 그러나 prototype를 지정하게 되면 getBean을 호출할때마다 객체 생성하여 메모리에 할당하게 된다.

 

 

- <bean> 태그에서 init-method 속성은 applicationContext.xml 파일 읽어 들여 bean들이 초기화 될때 수행되는 초기화 메소드를 지정한다.

 

- <bean> 태그의 lazy-init 속성은 applicationContext.xml 파일 읽어 들여 bean들이 초기화 함에 있어 사용 빈도가 적고 초기화 하는데 오래 걸리게 되는 객체에 대해 객체를 사용할때 초기화 하도록 지정하는데 사용

 

<bean id="samsung" class="polymorphism3.SamsungTV" lazy-init="true">

          <property name="injection" ref="apple"/>  - apple객체

  <property name="userName" value="홍길동"/>  - 홍길동 스트링

</bean>

 

<property> <constructor-arg> 에서 참조형이 객체일 때는 ref 사용하며, 기본 자료형일때는 value 사용한다.

 

------------------------------------------------------------------------

 

자바 기본

- interface 활용한 다형성 적용

interface A 만들고 aA a 구현 하고 ,bA에서 a 구현한다면

A a = new aA()  A a = new bA();  통한 다형성 적용이 가능하다.!

왜냐? aA bA interface A 구현했기 때문이다.

 

------------------------------------------------------------------------

- 어노테이션(Annotation)은 jdk 1.5버전 이상부터 사용이 가능하다.

- 어노테이션을 통해서 bean 정의 하면 XML 통해 bean 설정하지 않아도 인식이

  가능하다.

 

- 어노테이션을 사용하기 위한 설정

 

1. applicationContext.xml 파일의 beans 태그에 붉은 색 항목을 추가한다.

<beans xmlns="http://www.springframework.org/schema/beans"

      xmlns:context="http://www.springframework.org/schema/context"

      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-3.0.xsd

      http://www.springframework.org/schema/context

      http://www.springframework.org/schema/context/spring-context-3.0.xsd">

 

2. applicationContext.xml에

    <context:component-scan base-package="polymorphism3"/>

    등록한다.

   위의 의미는 context 사용하는 컴포넌트를 어노테이션으 사용하는 메소드들을 base package 

   polymorphism3 에서 찾아서 사용하겠다는 의미




어노테이션 방식 코딩


Applicationcontext,xml 설정


<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context"

    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-3.0.xsd

http://www.springframework.org/schema/context 

http://www.springframework.org/schema/context/spring-context-3.0.xsd"

>

     <context:component-scan base-package="polymorphism3"/>

        <!-- 이 패키지로 시작하는 모든 패키지의 class 들을 scan해라 -->

 

</beans>



TV.java

package polymorphism3;

public interface TV {
public void powerOn();
public void powerOff();
public void volumeUp();
public void volumeDown();
}


LgTv.java

package polymorphism3;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component("lg") // LgTv 클래스에 lg라는 id 부여
public class LgTV implements TV {
       @Autowired   //자동 매칭
private SonySpeaker speaker; 

public LgTV(){
System.out.println("스피커 할당.");
System.out.println("LgTV---LgTv 초기화.");
}
public void powerOn(){
System.out.println("LgTV---전원을 켠다.");
}
public void powerOff(){
System.out.println("LgTV---전원을 끈다.");
}
public void volumeUp(){
speaker.volumeUp();
}
public void volumeDown(){
speaker.volumeDown();
}
}

TvUser.java
package polymorphism3;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TVUser {
public static void main(String[] args) {

ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml");

TV tv = (TV)factory.getBean("lg");
tv.powerOn();
tv.volumeUp();
tv.volumeDown();
tv.powerOff();
}
}



Speaker.java

package polymorphism3;

public interface Speaker {
public void volumeUp();
public void volumeDown();
}



SonySpeaker.java

package polymorphism3;


import org.springframework.stereotype.Component;


@Component

public class SonySpeaker implements Speaker{

public void volumeUp(){

System.out.println("SonySepaker---소리를 올린다.");

}

public void volumeDown(){

System.out.println("SonySepaker---소리를 내린다.");

}

}



------------------------------------------------------------------------------------------------------------------ 어노테이션 설명

  @component : 컴포넌트이다.

  @service : 서비스 역활을 하는 컴포넌트이다.

  @Reposity : DAO와 같은 데이터 접근을 담당하는 역활이다

  @Controller : 컨트롤러 역활을 하는 컴포넌트이다.

 

'공부방 > Spring' 카테고리의 다른 글

교육5일차 정리  (0) 2013.03.08
교육 4일차 정리  (0) 2013.03.07
교육 3일차 정리  (0) 2013.03.06
교육 2일차 정리  (0) 2013.03.05
IoC(제어의 역전), DI(의존성 주입) 이란??  (3) 2013.02.06