본문 바로가기

책 읽기/스프링 책 읽기

스프링 책 읽기 1&2

스프링 네가지 주요 전략

* POJO를 이용한, 가볍고 비침투적인 개발

* DI와 인터페이스 지향을 통한 느슨한 결합도

* 애스펙트와 공통 규약을 통한 선언적 프로그래밍

* 애스펙트와 탬플릿을 통한 반복적인 코드 제거

1. EJB 빈생성

package helloejb; 
import javax.ejb.Stateless;
@Stateless(mappedName="helloejb.Hello") 
public class HelloBean implements Hello { 
  public String sayHello() { 
    return "Hello EJB!";
  }
}

2. DI를 통해 다양한 종속 객체를, 주입 가능

상호간의 종속관곈나 구체적인 구현방벙를 알 필요가 없이, 객체를 연결

종속객체가 필요로 하는 객체에 부여됨

3.로깅, 보안 등을 애스팩트 모듈로 생성가능

4.따라서 로깅, 보안 등에서의 반복적이 코드도 제거 가능

---

컨테이너

스프링의 컨테이너는 크게 BeanFactory와 , ApplicationContext로 나뉨

BeanFactory는 저수준의 기능만 제공 -> 책에서 크게 다루지 않을 예정

ApplicationContext를 통해, 스스로 스프링이, 정의된 내용을 로드함, 이 과정에서 getBean() 메소르를 통해 빈을 조회한다

빈의 lifecycle

1. 인스턴스화

2. 프로퍼티 할당

3. setBeanName

4. setBeanFactory

5. setApplicationContext

6. 사전 초기화

7. afterPropertiesSet

8. 커스텀 호출 메소드 초기화

9. 사용

10. 사용 종료 -> deastroy() -> 커스텀 소멸 메소드 호출

------

https://galid1.tistory.com/494

[2장]

발견 가능한 빈 만들기

@Bean : 개발자가 직접 제어 불가능한 외부 라이브러리등을 빈으로 만들 때 사용

@Component : 직접 개발자가 작성한 Class를 빈으로 등록

--

@Component 애너테이트를 통해, 스캐닝 가능한 빈을 등록

-> @ComponentScan + @Configuration 어노테이션을 통해, 컴포넌트스캐닝을 가능케 할 수 있음 --- 그 패키지와, 하위패키지 스캐닝

-> 각각 이름과, 패키지를 명시하여 해당 Component의 이름, Scan할 베이스 패키지를 명명 가능

@Configuration @ComponentScan("soundSystem") public class CDPlayerConfig {}

---

https://galid1.tistory.com/512

---

자바로 빈 와이어링 하기

오토 와이어링 : 스프링이 빈의 요구사항과 매칭되는 어플리케이션 컨텍스트상에서 다른 빈을 찾아, 의존성을 자동으로 만족시키는 수단

@Autowired 어노테이션 사용하여 가능

대부분 컴포넌트 스캐닝, 오토아이어링으로 가능

그러나 타사 라이브러리와 컴포넌트 등을 가져오는 것은 자동이 아님 -> 자동 설정을 해야함 -> JavaConfig, XML

@Component 
public classs CdDPlayer implements MediaPlayer{ 
  private CompactDisc cd; 
  
  @Autowired 
  public CDPlayer(CompactDisc cd) {
    this.cd = cd; 
   } 
 }

JavaConfig 주입하기

@Configuration : 이를 설정 클래스로 식별하고, 빈의 자세한 내용이 포함될 수 있다는 것을 나타냄

-> 해당 에너테이션이 있는 클래스의 메소드에 @Bean 애너테이션으로 참조를하면, 빈 와이어링 완료

빈을 생성하는 메소드를 구성하는데에 있어서, 제약은 자바언어의 특성정도

XML로 와이어링하기

javaConfig로 주입하는것과 크게 다르지 않음

1. 루트 XML을 만듬

2. 간단한 빈 선언

<bean class="soundsystem.SgtPeppers"> 
-> 이름이 없으니, 빈ID는 soundsystem.SgtPeppers#0 

<bean id="compactDisc" class="soundsystem.SgtPeppers"> 
-> 빈 ID는 compactDisc

3. 생성자 주입을 사용한 빈 초기화

<bean id="cdPlayer" class="soundsystem.CDPlayer"> 
<constructor=arg ref="compactDisc"> </bean> 
=> ID가 compactDisc인 빈에 대한 레퍼런스를 CDPlayer 생성자로 전달 

같은 방식인 c-네임 스페이스 
<bean id="cdPlayer" class="soundsystem.CDPlayer c:cd=ref="compactDisc" />

4. 와이어링 컬렉션

=> list를 와이어링 하는 방법 --

<bean id="cdPlayer" class="soundsystem.CDPlayer">
<constructor-arg> <list> <value> ... </value> .... </list> 
</constructor-arg> </bean>
=> set도 가능 
  
  
===> util-네임스페이스를 사용하면, list나 set등의 컬렉션 빈을 만들 수 있음 
<util:list id="track">
<value> aaa </value> ...

5. 프로퍼티 주입하기

<bean id="cdPlayer" class="soundsystem.CDPlayer"> 
<property name="title" value="abc"/>
=> 해당 방식으로 프로퍼티 주입 

<bean id="cdPlayer" class="soundsystem.CDPlayer" p:title="abc"> 
=> 해당 방식(p-네임스페이스) 도 가능

JavaConfig, XML 믹싱

JavaConfig -> Javaconfig

@Import(CDPlayerConfig.class)

 

JavaConfig -> XML

@ImportResource("classpath:cd-config.xml")

 

XML -> JavaConfig

<bean class="soundsystem.CDConfig"/>

 

XML -> XML

<import resource="cdplayer-config.xml"/>