Spring Framework(1)

Spring 프래임워크란?

IoC와 AOP를 지원하는 경량의 컨테이너 프레임워크

- 경량(두 가지 이유)

       1. 모듈들이 jar파일로 묶여있다.  

       2. POJO(Plain Old Java Object) 지원하여 형식 제약이 없다  

          ex) Servlet 같은 경우는 doGet, doPost 등의 제약이 있는 것이 차이점

- 컨테이너

       객체의 인스턴스 생성, 생명주기를 관리

       프로그래머가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸을 컨트롤해준다.

- IoC(Inversion of Conversion, 제어의 역행)

       Dependency Injection을 제공!

       ex) 다음 코드를 스프링으로 설정할 수 있다.
           class TV {

                     private LgSpeaker speaker;

                     public TV {

                                speaker = new LgSpeaker();

                     }

                     public volumeUp(){

                                speaker.makeLgSpeakerUp();

                     }

           }

           ->        삼성스피커로 바꿈(관리가 어려움)

           class TV {

                     private SamSpeaker speaker;

                     public TV {

                                speaker = new SamSpeaker();

                     }

                     public volumeUp(){

                                speaker.makeSamVolumeUp();

                     }

           }
       -> 스프링으로 설정가능(소스 바꿀필요 없이 설정값만 바꾸면됨)
           <bean id="samsungSpeaker" class="class.SamSpeaker" />

           <bean class="class.TV">

                     <property name="speaker" ref="samsungSpeaker" />

           </bean>
       -> 참고
           <bean id="dbMessageProvider" class="com.lrp.cbo.cm.message.DBMessageProvider" />

           <bean class="com.lrp.core.message.MessageSource">

                     <property name="messageProvider" ref="dbMessageProvider" />

           </bean>
       1. com.lrp.cbo.cm.message.DBMessageProvider 객체를 생성

       2. com.lrp.core.message.MessageSource 객체를 생성할 때 id:dbMessageProvider(DBMessageProvider 객체)참조

       3.  /lrpcore/src/main/java/com/lrp/core/message/MessageSource.java

                 private static MessageProvider messageProvider; 객체에 1.에서 생성한 DBMessageProvider 객체를 주입(=의존성 주입)

- AOP (Asepect-Oriented Programming)

       1. 핵심관심과 횡돤관심 분리 (핵심관심 : 비지니스로직, 횡단관심 : 로그 등 공통 로직)

       2. execution 패턴에 정해진 표현이 수행될때 debugLogAspect 객체의 logAround 를 실행한다.
           <bean id="debugLogAspect" class="com.lrp.core.log.DebugLogAspect">

                     <property name="jsonMapper" ref="jsonObjectMapper" />

           </bean>

           <beans profile="pc">

                     <aop:config >

                         <aop:aspect id="aspectLoggging" ref="debugLogAspect">

                             <aop:pointcut id="svcPointcut" expression="execution(public * com.lrp..*.svc.*.*(..))" />

                             <aop:around method="logAround" pointcut-ref="svcPointcut"  />

                         </aop:aspect>

                     </aop:config>

           </beans>

Comments

comments powered by Disqus