설정파일의 위치에 따라 APPLICATIONTEXT의 구현체가 달라진다
설정파일의 위치에 따라 리소스로더의 종류가 달라짐
웹/파일/클래스패스 리소스인지 정적으로 정해진게 아니면 GENERIC사용 가능, 이때 PREFIX로 스마트로더를 작동시키는걸 도와줌
컨테이너한테 '이러이러한 빈' 주세요 하려면 검색조건을 설정해야함
빈 등록시에 class와 id설정 -> 빈 검색조건
<!-- spEL: util이용 (현재는 기본namespace여서 util: 빠짐) -->
<properties id="dbInfo" location="classpath:kr/or/ddit/various/dbinfo.properties" /><!-- prefix사용: ResourceLoader 위해-->
<!-- spEL에서도 사칙연산이 지원되어 dbInfo.driver-ClassName을 연산으로 판단하기때문에 연상배열으로 대체하여 쓸 수 있음 -->
<beans:bean id="vo1" class="kr.or.ddit.vo.DBInfoVO"
c:driverClassName="#{dbInfo.driverClassName}"
c:url="#{dbInfo['url']}"
c:user="#{dbInfo['user']}"
c:password="#{dbInfo['password']}"
c:initialSize="#{dbInfo.initialSize}"
c:maxActive="#{dbInfo.maxActive}"
c:maxWait="#{dbInfo['maxWait']}"
>
</beans:bean>
jsp EL | sp EL |
---|---|
concat ㄴㄴ | #{dbInfo.driverClassName+3} concat 지원 |
#{dbInfo['user']*3} * 3하면 3번출력됨 | |
속성명이 사용됨 | bean의 id가 사용됨 |
<!-- property placeholder -->
<context:property-placeholder location="classpath:kr/or/ddit/various/dbinfo.properties"/>
<beans:bean id="vo2" class="kr.or.ddit.vo.DBInfoVO"
p:driverClassName="${maindb.driverClassName}"
p:url="${maindb.url}"
p:user="${maindb.user}"
p:password="${maindb.password}"
p:initialSize="${maindb.initialSize}"
p:maxActive="${maindb.maxActive}"
p:maxWait="${maindb.maxWait}"
/>
<context:property-placeholder />
로 등록시엔 id 요구하지않음 -> bean이 아니라는 얘기<context:property-placeholder />
이걸 넣는다?#{dbInfo['maindb.driverClassName']+3}
p:driverClassName="${maindb.driverClassName+3}"
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="sampleDAOImpl" class="kr.or.ddit.sample.dao.SampleDAOImpl"></bean>
<bean id="mySqlDAO" class="kr.or.ddit.sample.dao.SampleDAO_Mysql"></bean>
<bean id="sampleService" class="kr.or.ddit.sample.service.SampleServiceImpl">
<property name="dao" ref="mySqlDAO" /><!-- setter에서 자바빈규약이 적용되어 dao라는 이름이 만들어짐 | 참조변수기에 ref-->
</bean>
</beans>
Sample-Context.xml지우고 DI로 만들것임
javax.annotation.Resource; - 권장, pojo에 더 가까움
org.springframework.beans.factory.annotation.Autowired;
inject는 엔터프라이즈형 jdk에 잇음 - 이걸 권장
child에서 parent ctrl+space로 쓰기