728x90

6. 의존객체 Dependency injection

- 배터리 일체형(특정 배터리 소멸시 장난감 사야함) vs 배터리 분리형(쓸때 마다 배터리를 넣음 or 처음에 배터리가 있고 추가로 set하여 사용)

- 스프링 설정파일(applicationContext.xml)


7. 다양한 의존 객체 주입

생성자, setter, list, map 타입 DI 방법이 있다. 

7-1 :생성자를 이용한 의존 객체 주입

메소드중 첫자가 대문자면 생성자. 

public StuduntRegisterService(StudentDao studentDao){

this.studentDao= studentDao;

}

<bean id="studentDao" class="ems.member.dao.studentDao"/>

<bean id="registerService" class="ems.member.service.StudentRegisterService">

<constructor-arg ref="studentDao"></constructor-arg>

</bean>

7-2 :setter를 이용한 의존객체 주입

set 뒤의 대문자를 소문자로 바꾸고 찾음. 

 public void setJdbcUrl(String jdbcUrl){

this.jdbcUrl = jdbcUrl;

}

public void setUserId(String userId){

this.userId = userId;

}

public void setUserPw(String userPw){

this.userPw = userPw;

}

 <bean id="dataBaseConnectionInfoDev" class="ems.member.DataBaseConnectionInfo">

<property name="jdbcUrl" value="jdbc:orclae:thin:@localhost:1521:xe"/>

<property name="userId" value="scott"/>

<property name="userPw" value="tiger"/>

</bean>

7-3 :List타입 의존 객체 주입

 public void setDevelopers(List<String> developers){

this.developers=developers;

}

 <property name="developers">

<list>

<value>Cheney.</value>

<value>Eloy.</value>

<value>Jasper.</value>

<value>Dillon.</value>

</list>

</property>

7-4 :Map타입 의존 객체 주입

public void setDevelopers(Map<String, String> administrators){

this.administrators=administrators;

}

<property name="administrators">

<map>

<entry>

<key>

<value>Cheney</value>

</key>

<value>cheny@springPjt.org</value>

//<ref bean=""> 빈주입도 가능. 

<entry>

<entry>

<key>

<value>Jasper</value>

</key>

<value>Jsper@springPjt.org</value>

<entry>

</property>


8. 스프링 설정파일 분리

applicationContext.xml  --> 분리 appCtx1.xml, appCtx2.xml, appCtx3.xml

8-1-1 MainClassUseXmls.java

String[] appCtxs = {

"classpath:appCtx1.xml",

     "classpath:appCtx2.xml",

     "classpath:appCtx3.xml"

};

GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(appCtxs);

8-1-1 appCtximport.xml 연결후 xml 파일에 import

<import resource="classpath:appCtx1.xml"/> 

<import resource="classpath:appCtx2.xml"/> 

<import resource="classpath:appCtx3.xml"/> 


JVM 에서 어플리케이션을 실행할때. main 을 찾아서 실행.. 프로젝트를 실행시키면 메인 메소드 목록을 보여줌. 


8-2 빈(Bean) 범위

싱클톤 singleton : 1개만 생성되며  getBean() 메소드로 호출될 때 동일한 객체가 반환된다. 

             호출1 : getBean("A"), 호출2: getBean("B")   >> 같은 메모리 주소에 있는 객체 1개만 호출. 

프로토 타입 prototype: 싱글톤 범위와 반대의 개념, scope 속성으로 명시해 주면된다. 

<bean id="injectionBean" class="scope.ex.DependencyBean" />

<bean id="dependencyBean" class="scope.ex.DependencyBean" scope="prototype">

<constructor-arg ref="injectionBean"/> 

<property name="injectionBean" ref="injectionBean"/>

</bean>


9. 의존객체 자동 주입

9-1 의존객체 자동주입이란?

스프링 설정 파일에서 의존객체를 주입할 때 Constuctor-org 또는 property 태그로 의존대상 객체를 명시하지 않아도 

스프링 컨테이너가 자동으로 필요한 의존 대상을 찾아서 의존 대상 객체가 필요한 객체에 주입해 주는 기능

구현한 방법은 @Autowired, @Resource 어노테이션을 이용해서 쉽게 구현할 수 있다. 

9-2 @Autowired

프로퍼티, 메소드, 생성자에서 객체의 타입이 일치하는 객체를 자동으로 주입한다. 

*** 프로퍼티, 메소드에 @ autowired사용시에는 반드시 default 생성자를 명시해야 한다. 

ex) sevice 에서 dao java 코드 에서 연결.. 

wordRegisterService.java

//@Autowired

private WordDao wordDao;

@Autowired

public WordRegisterService(WordDao wordDao){

this.wordDao=wordDao;


//@Autowired

//public void setW  

<Context:annotation-config/>

<bean id="wordDao" class="com.word.dao.wordDao"/>

<bean id="registerService" class="com.word.service.wordRegisterService">

<!--<constructor-arg ref="wordDao"/>-->

</bean> 


9-3 @Resource

@Autowired : 스프링컨테이너에서 객체를 찾음. 개체가 엄청많고.. 필요한 데이터 타입을 찾아 알맞은 데이터 타입을 넣어줌 
- 생성자, 프로퍼티, 메소드, 객체의 타입(WordDao를 찾음)이 일치하는 객체를 자동으로 주입한다, 디폴트 생성자 명기

@Resouce  : 객체의 타입을 보지 않고 동일한 이름이 있는지 찾아씀.    

- 프로퍼티, 메소드 객체의 이름(wordDao1를 찾음)이 일치하는 객체를 자동으로 주입한다, 디폴트 생성자 명기

- 생성자에는 못씀. 

@Autowired

public WordRegisterService(WordDao wordDao1){

this.wordDao=wordDao;

}  


10 의존 객체 선택

10-1 의존 객체 선택

동일한 객체가 2개 이상인 경우 스프링컨테이너는 자동주입 대상 객체를 판단하지 못해서 Exception을 발생시킨다. 

@Autowired

@Qualifier("userDao")

private WordDao wordDao; 

 <bean id="wordDao" class="com.word.dao.WordDao">

<qualifier value="usedDao"/>  //퀄리 필러 : 예선통과자

</bean>

<bean id="wordDao2" class="com.word.dao.WordDao"/>

<bean id="wordDao3" class="com.word.dao.WordDao"/>


10-2 의존객체 자동주입 체크

@Autowired(required=false)

10-3 @Inject (java 기능)

@Autowired(spring 기능) 와 유사 의존객체 자동 주입 체크 못함 

@Named  : @Qualifier와 유사  , Qualifier와 달리 xml 작성 안해도 됨. 







+ Recent posts