Spring/02 Spring DI와 AOP

03 Spring DI 활용하기-실습

라타노 2023. 6. 23. 23:19
반응형

pring DI 활용하기-실습

config.xml (resources config.xml 작성

싱글톤: 클래스의 객체를 하나만 생성

>> scope를 생략하면 디폴트 값(scope="singleton")으로 입력

>> getBean( )할 때마다 새로운 객체가 만들어 지길 원하면 scop="prototype"

 

 

 

SpringDiTest.java

 

 

SpringDiTest.java

>> 을 주석처리 후, config.xml에서 <property>를 사용하여 값을 입력

 

 

 

1) config.xml <property> : 속성

>> value는 기본값만 알아서 class car의 타입의 String 이나 int값으로 변환시켜준다

>> Setter가 있어야 사용 가능하다 <property> 태그가 Setter를 사용

 

 

주석 처리 후 결과값

>> cofig.xml을 사용하면 변경사항이나 코드의 재사용에 유리

 

 

 

2) config.xml <constructor-arg> : 생성자

>> <constructor-arg>생성자가 있어야 사용 가능하다

 

 

SpringDiTest.java

 

 

 

3) config.xml <context:component-scan>

 

 

SpringDiTest.java

>> Setter 사용

>> config.xml<context:component-scan> 등록하고 @Component를 주입

>> @Component가 주입된 클래스를 찾아 첫글자를 소문자로 변환하여 객체로 저장(key 값)

 

 

 

4) config.xml <context:annotation-config/>

>> <context:annotation-config/>를 등록해야 @Autowired을 사용할 수 있지만,

      <context:component-scan>만 등록해도 @Autowired를 사용 할 수 있다

 

 

SpringDiTest.java

>> @Value는 객체의 값을 넣어준다 (타입을 자동변환)

 

 

 

5) byTybe - 단점

SpringDiTest.java

>> expected single matching been : 메칭되는 bean 하나를 예상 했는데

>> but found 3 : 그런데 3개나 발견했다 engine, superEngine, turbeEngine

>> 타입이 여러개 일 때는 byTybe으로 찾는 것 보다 byName이 정확하다

 

 

 

6) @AutowiredbyTybe 검색과정

 

 

7) @Qualifier( )@Resource( )

SpringDiTest.java

>> @Component가 없으므로 @AutowiredsuperEngineturbeEgine 값만 남게 된다

>> @Qualifier(“superEgine”) @Autowired가 검색할 때 superEngine을 사용하라고 지정해준다

>> @Qualifier(“superEgine”) + @Autowired 대신 @Resource(name="superEgine") 과 같이 하나의 문장으로 사용할 수 있다

>> @Qualifier(“superEgine”) + @AutowiredbyTybe으로 찾고 @Qualifier(“superEgine”)으로 확인

>> @Resource(name="superEgine")byName으로 찾는다

>> 주로 @Autowired가 많이 사용된다

 

 

 

 

 

반응형