6. 의존객체 Dependency injection
- 배터리 일체형(특정 배터리 소멸시 장난감 사야함) vs 배터리 분리형(쓸때 마다 배터리를 넣음 or 처음에 배터리가 있고 추가로 set하여 사용)
- 스프링 설정파일(applicationContext.xml)
7. 다양한 의존 객체 주입
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
@Resouce : 객체의 타입을 보지 않고 동일한 이름이 있는지 찾아씀.
- 프로퍼티, 메소드 객체의 이름(wordDao1를 찾음)이 일치하는 객체를 자동으로 주입한다, 디폴트 생성자 명기
- 생성자에는 못씀.
@Autowired public WordRegisterService(WordDao wordDao1){ this.wordDao=wordDao; } |
10 의존 객체 선택
10-1 의존 객체 선택
@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 기능)
@Named : @Qualifier와 유사 , Qualifier와 달리 xml 작성 안해도 됨.
'For Real > Java & Spring' 카테고리의 다른 글
java version (0) | 2019.02.26 |
---|---|
[자바스프링프레임워크 by 백기선]자바스프링프레임워크 -웹 & MVC (0) | 2019.01.11 |
[자바스프링프레임워크 by 백기선]스프링 프레임워크 소개, 프로젝트 생성 (0) | 2019.01.04 |
functional programming vs OOP 번역 1 (0) | 2018.12.11 |
open JDK vs oracle JDK (0) | 2018.11.07 |