Spring 2.5 DAO & Transaction

Spring DAO쪽은 Template Pattern이 적용를 많이 한 부분같다
일련의 database 연결작업과 tranaction 시작과 commit,rollback, connection 객체 받환등
동일한 코드의 받복를 Template로 빼고 상황에 따라 바뀌는 부분만
사용자가 구현하도록 하는 형식인듯 하다

DAO Template(자원준비,트랜잭션시작) -> DAO callback (계발자 구현) ->
DAO Template(트랜잭션 커밋,롤백,자원반환)






by buffalo76 | 2008/02/23 22:17 | spring 2.5 DAO | 트랙백 | 덧글(1)

Spring AOP

어디까지나 내가 이해안데로 정리했으며 틀릴 수 있음
spring 1점대는 생략하고 아는것만 정리함


spring 1점대는 aop 설정이 좀 어렵고 복잡한 느낌이 들었다
spring 2점대가 되면서 좀 설정이 간단 해졌고,POJO로 Aspect를 작성할 수 있고
ProxyFactoryBean설정이 생략가능 해졌다


JoinPoint :
spring aop 행동(기능)들이 실행시킬 시점(위치)
참고로 spring aop는 method joinpint만 지원됨
정적Point와 동적 Point 또는 정적,동적 모두 할 수 있는 Point가 있는데 되도록
성능상 동적 Point를 사용해야 한다

Target : aop가 적용될 object
Advice :
행위
Before Advice target object의 method 실행되기 전 => target object의 호출제어권이 없다
After Advice target object의 method 실행된후 => target object의 호출제어권이 없다
Around Advice target object의 method 전후에 => target object의 호출제어권 있다

Aspect = Advisor :
Joinpoint + Advice

Introduction :
이건 좀 특이하게 target object의 method,field 을 추가 해준다 마치 target객체에
super Object의 method,field를 사용하듯


Advice를 이용한 예1
@Aspect -aspect선언
@Pointcut -
JoinPoint 선언 이때 method body부분은 구현 하지 않음 Poincut이름으로만 쓰이므로
poincut expression은 springframework.org 참조
@Around -
행위선언
xml설정 -
<aop:aspectj-autoproxy proxy-target-class="true" / >를 선언함으로써
@Aspect 가 선언되어있는 class를 찾아 Aspect로 등록시켜주는 후처리기를 설정한다
proxy-target-class="true" 를 true로 함으로써
Target class의 Interface가 필요없어도 되고, CBLIB를 사용하여 Proxy를 만든다
정적으로 작용하며 동적이 아니라 부하가 준다



ex- advice적용





Introduction예
Target Object에 method나 field를 추가 해준다






by buffalo76 | 2008/02/23 17:23 | spring2.5 AOP | 트랙백 | 덧글(0)

IOC Spring2.5

이 내용은 어디까지나 내가 이해한 내용를 정리한것으로 틀릴 수 있음
기본적인 spring내용은 생략함



I.BeanFactory와 ApplicationContext
BeanFacotory는 무조건 bean생성시 lazy-init이다
ApplicationContext는 default가 lazy-init false이면 lazy-init true를 줄 수 있다
예제 1-1
DTD

Bean

BeanFactory ApplicationContext Test

결과



II.Spring Container load 순서
1.BeanFactoryPostProcessor
컨테이너가 시작되기전 외부 설정file들과 같은 정보를 읽어올 수 있다
(ex:PropertyPlaceholerConfigurer,ClassEditor 등)
2.BeanFactoryPostProcessor의 posProcessorBeanFactory method호출
3.BeanPostProcessor constructor 호출
4.Bean들load
5.Bean들 DI
6.BeanPostProcessor의 postProcessBeforeInitialization method 호출
7.BeanPostProcessor의 postProcessAfterInitialization method호출

ex 1-2
DTD

BeanFactoryPostProcessor

BeanPostProcessor

Container load

결과


III.Spring 2.5 IOC
xml에 bean설정를 할 필요없이 component-scan를 해주면 strerotype으로 선언된것들은
bean이 생성된다
@Autowired,@Required 를 선언시 DI가 bean들에서 일어나는데 xml에 bean설정이나 아님
component-scan할수있게 strerotype를 bean에 설정해주어야 한다

DI에 관련된 annotation은 @Autowired,@Resources등이 있으며 받드시 DI될 bean들이 있어야한다
@Autowired 는 속성설정required false로 하면 DI될 bean이 없더라고 예외가 발생하지 않는다
또한 @Autowired는 DI시 bean의 type으로 찾는데 같은 type이 존재시 예외가 던저진다
이를 방지 하기 위해 primary option를 사용하면 된다 또는 이름(아이디)으로 찾기위한
annotation이 있는데 @Qualifier이다 이는 flied에 만 사용가능하고 method에는 사용 하지 못한다

또한 @Autowired나 @Required등를 사용시 가각의 후처리bean설정이 필요한데
< context:annotation-config / > 만 써주면 생략할 수 있다

또한 DI이 일어날때 가각 setter method가 필요했었는데 이제는 필요치 않다

strerotype
@Component
@Controller
@Service
@Repository등 springframework.org 참조

ex-3 xml설정


ex-4



III그외 scop에 관해
spring bean은 기본적으로 sigleton 으로 생성된다 option으로 scope설정를 변경하능 하다
BeanFactory는 sigleton,prototye2가지만 가능 하지만
ApplicatonContext는 sigleton,prototye,session,globasession,request등이 가능하다
문제는 singleton bean이 request나 session scope등 다른 scope에 존제하는 bean를 물고
있를 때다 이러할때는 처럼
scope-proxy를 설정 해야 한다 그럼 sigleton bean이 자신에게 물려있는 다른 scope를 DI할때
proxy를 만들어 DI하는데 targetClass로 설정하면 DI될 bean의 interface가 존해하지 않아도 된다
이럴경우 CGLIB를 이용하며 Proxy생성한다 interfaces로 하면 bean의 interface가 존재해야만한다
그리고 interfaces로 하면 JDK Dynamic Proxy를 생성한다 되도록 targetClass로 하며 부하를 줄인다

ex -5






이어지는 내용

by buffalo76 | 2008/02/23 10:10 | spring2.5 IOC | 트랙백 | 덧글(0)

" "

end

by buffalo76 | 2008/02/22 15:10 | spring2.5 IOC | 트랙백 | 덧글(0)

◀ 이전 페이지          다음 페이지 ▶