재미있게 코딩합시다

2.스프링(Spring)-어노테이션, @postConstruct, @ preDestory 본문

IT /Spring(스프링)

2.스프링(Spring)-어노테이션, @postConstruct, @ preDestory

감민셔 2019. 1. 3. 11:11

스프링 컨테이너 만드는 방법


1.XML 설정파일(applicationContext)을 통해서

- 전부다 XMl로 설정

- 어노테이션을 사용하는 방법.


2. 썡 자바코드 ( 잘 쓰지않는다)




@Component 을 쓰는 방법 :

  applicationContext.xml 에서 Namespaces를 클릭한다.


context 를 클릭해주고 저장


이후 

<context:component-scan base-package=""></context:component-scan> 를 작성후

package = " " 에는 사용할 package 이름을 지정해주면 됩니다.


이후 Bean에 넣을 class 파일안의   public class ~~ 위에 @Component 을 작성하면 끝납니다.


@Autowired : 컨테이너가 가지고 있는 Bean 객체중 여기에서 넣을 수 있을거 같은놈을 찾아서 여기에 집어 넣는다.

- 함수위에 적어준다.

- 변수위에도 작성이가능하다.

     =>setter도 없고 변수도 private인데 들어간다.

@Autowired

- 타입 우선매칭

- 컨테이너에 들어있는 Bean 객체 중에서 타입이 일치하는 Bean 책체를 주입

- 타입이 일치하는 Bean 객체가 없으면 ? 

=> 에러!!! 해당 Bean 객체 자체가 등록이 안디고, 그러면 컨테이너 자체가 발드가 안됨

- 에러는 안띄우고 그냥 주입없이 넘어갈려면?

=> required속성을 false로 지정 해주면 된다.

- 타입이 일치하는 Bean객체가 한개보다 많으면? 

=> 에러!! 해당 Bean객체 자체가 등록 안되고, 컨테이너 자체가 빌드 되지않는다.

=> 타입매칭 되는 애가 많으면 2순위로 이름을 매칭시킨다.

=> 매개변수 이름이랑 등록된 Bean 객체중 타입맞는 아이의 이름이 맞으면 그아이로 연결시켜준다.

-  매개변수 이름이랑 등록된 Bean 객체중 타입맞는 아이들중 이름이 맞는 애가없으면

=> @Qualifier // 타입 맞는애가 2개이상이고, 이름맞는애가 없다 그런대 주입시킬 Bean객체의 이름은 바꾸면안될때 쓴다.


스프링 컨테이너에  Bean 객체가 

1. 사용준비가 되는 타이밍에 호출될 함수를 만들기

2. 스프링컨테이너에서 빈 객체가 폐기되기 직전 호출될 함수를 만들기


3가지 방법이있다

1. XML

2. @Annotation

3. 인터페이스


1. @Annotation 방법:


@postConstruct  :

-객체를 사용시 호출 할 메소드를 지정

@PreDestory

- 객체를 소멸 시 호출 할 메소드를 지정

- close()하기 직전에 실행된다.((AbstractApplicationContext).close()




2. XML 방법 : 


java 코드


XML 코드


3. 인터페이스

여기까지만 XML 코드를 작성해줍니다.


그리고  다른 Bean 객체들에게 의존?하는 java class 에 가서 인터페이스를 해주면 됩니다. 

InitializingBean : 초기화 메소드 와 같다.


DisposableBean : 소멸 메소드 와 같다.




Comments