Ace-T's Blog 내 검색 [네이버 커넥트 이웃 합니다~^-^/ 요청 大 환영~~]

Spring WebFlux

OpenSource/Spring 2017.04.26 17:40
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

toby님이 회사에 오셨다.
스프링캠프 2017을 등록 못해서 못갔는데 다행히 좋은 강의를 들을수 있어서 좋았다.

강의자료 : 

Spring WebFlux
 람다식 
 추가 : 구 Spring web reactive 
  •  용도
    • 서비스간 호출이 많은 마이크로서비스 아키텍처에 적합.
    • 비동기 - 논블럭킹 개발방식.
    • 성능을 뛰어나게 만들겠다.
  • 기존 @MVC 방식, 새로운 방식
  • 서블릿 스택과 api에서 탈피
  • 블록킹, 논블록킹
    • 동기, 비동기와는 관점이 다름.
    • 내가 직접 제어할 수 없는 대상을 상대하는 방법
    • 대상이 제한적임
      • IO
      • 멀티 쓰레드 동기화 
  • 함수형 스타일의 콜백 방식

스프링 웹
1. 요청 매핑
2. 요청 바인딩
3. 핸들러 실행
4. 핸들러 결과 처리(응답 생성)

WebFlux
  • Router Function - 1. 요청매핑 (.route())
    • 함수형 스타일 (람다식..)
  • Handler Function - 2,3,4

RouterFunction의 등록 -> @Bean으로 만든다.
and(), andRoute(), nest() 등의 유용 메소드들.
flatMap

장점
  • 모든 웹 요청 처리 작업을 명시적인 코드로 작성.
  • 어노테이션에 의존하는 @MVC 스타일보다 명확
  • 정확한 타입 체크 가능.
  • 함수 조합을 통한 편리한 구성, 추상화에 유리
  • 테스트 작성의 편리함.

단점
  • 함수형 스타일의 코드가 익숙치 않음.
  • 기존 방식 가능

섞어서 사용 가능.
@MVC 요청 바인딩 + return Mono/Flux 사용.

WebFlux와 리액티브 기술
블로킹 IO 사용 X

JPA - JDBC 기반 RDB 연결
현재는 노답. - 블로킹 메소드로 점철된 jdbc api
JDK 10에서 Async JDBC가 등장할 수도(빠른 시간내에 적용)
@Async (적절한 쓰레드풀을 사용)
단, MongoDB, Redis, CouchDB등 Async 가능.

Spring5 함수형 스타일..

ReactiveStreams
RxJava를 비롯한 다양한 리액티브 기수에 적용된 표준 인터페이스
자바9에 Flow api로 포함.

뭘 공부해야하나?
java8 + 함수형 프로그래밍에 익숙해질 것.
Completablefuture와 같은 비동기 작업의 조합, 결합에 뛰어난 툴에 사용법을 익힐 것.

ReactorCore 학습 

열심히 공부하자+ㅁ+ㅋㅋ


저작자 표시 비영리 변경 금지
신고

'OpenSource > Spring' 카테고리의 다른 글

Spring WebFlux  (0) 2017.04.26
ChainedTransactionManager를 이용한 글로벌트랜잭션  (0) 2013.08.22
Bug  (0) 2013.06.21
@Vaild 처리 시 주의 할 사항!!  (0) 2013.06.21
Spring jmsTemplate 사용하기  (0) 2013.03.26
HornetQ, JMS Client using Springframework and Maven  (0) 2013.03.22

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

ChainedTransactionManager를 이용한 글로벌트랜잭션

OpenSource/Spring 2013.08.22 16:39
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

 

 

ChainedTransactionManager는 정말 획기적인 것 같다.

2pc의 글로벌트랜잭션을 하기 위하여 XA datasource를 이용하던지, 분산처리를 할 수 있는 오픈소스를 사용하여야만 하였다.

하지만 stand alone 에서도 또는 tomact에서! 아주 쉽게 2pc 처리를 할 수 가 있다.
즉, 글로벌 트랜잭션으로 묶을 수 가있다.

 

환경 : spring 3.1

         tomcat 6.0

         maven project

 

 

 


 

 

 

 maven을 사용하고 있다면 아래의 jar파일을 우선적으로 가져와야한다.

 

# pom.xml 설정

 

dependencies에 아래와 같이 선언한다.

 

 <dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-neo4j-tx</artifactId>
  <version>2.1.0.RELEASE</version>
  <exclusions>
   <exclusion>
    <artifactId>cglib</artifactId>
    <groupId>cglib</groupId>
   </exclusion>
  </exclusions>
 </dependency>
 <dependency>
  <groupId>org.neo4j</groupId>
  <artifactId>neo4j-kernel</artifactId>
  <version>1.8</version>
 </dependency>

 

 

 


 

 

# 데이터소스 설정

  데이터소스는 dbcp로 설정!!

  
 <!-- DataSource from DBCP -->
   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
       <property name="driverClassName" value="${database.driver.ClassName}" />
      <property name="url" value="${database.url}" />
      <property name="username" value="${database.username}" />
      <property name="password" value="${database.password}" />
 </bean>

 

<bean id="dataSource_remote" class="org.apache.commons.dbcp.BasicDataSource">

    블라~블라~
</bean>

 

 


 

 

# context 설정

 

 <tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager"/> 

 -> proxy-target-class="true"는 class class 기반 일경우에 true~!!! Interface 기반이면 삭제 해도 무관하다 default가 false 이다!

 

 <bean id="transactionManagerAcet"
  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource" />
 </bean>


 <bean id="transactionManagerAcetRemote"
  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource_remote" />
 </bean>

 

 <bean id="transactionManager"    <--- 대표가 되는 트랜잭션 manager~!
  class="org.springframework.data.neo4j.transaction.ChainedTransactionManager"
  lazy-init="false">
  <constructor-arg>
   <list>
    <ref bean="transactionManagerAcet" />
    <ref bean="transactionManagerAcetRemote" />
   </list>
  </constructor-arg>
 </bean>     

 

 

 


 


 괜찮은 것 같다.

 

  - 끝 -

저작자 표시 비영리 변경 금지
신고

'OpenSource > Spring' 카테고리의 다른 글

Spring WebFlux  (0) 2017.04.26
ChainedTransactionManager를 이용한 글로벌트랜잭션  (0) 2013.08.22
Bug  (0) 2013.06.21
@Vaild 처리 시 주의 할 사항!!  (0) 2013.06.21
Spring jmsTemplate 사용하기  (0) 2013.03.26
HornetQ, JMS Client using Springframework and Maven  (0) 2013.03.22

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

Bug

OpenSource/Spring 2013.06.21 18:55
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

https://jira.springsource.org/browse/SPR-4122

 

찾아보자!

저작자 표시 비영리 변경 금지
신고

'OpenSource > Spring' 카테고리의 다른 글

Spring WebFlux  (0) 2017.04.26
ChainedTransactionManager를 이용한 글로벌트랜잭션  (0) 2013.08.22
Bug  (0) 2013.06.21
@Vaild 처리 시 주의 할 사항!!  (0) 2013.06.21
Spring jmsTemplate 사용하기  (0) 2013.03.26
HornetQ, JMS Client using Springframework and Maven  (0) 2013.03.22

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

@Vaild 처리 시 주의 할 사항!!

OpenSource/Spring 2013.06.21 11:47
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



Server Validation Check를 하는데 있어서..주의사항이 있다!

 

ex) message= 부분에서 띄어쓰기를 하면..파싱을 못하는 듯 하다..ㅠ_ㅠ..

잘된 예

@NotEmpty(message="메뉴명, CMN.I0000001.usr")

 

잘못된 예

@NotEmpty(message=" 메뉴명, CMN.I0000001.usr") // 앞에 공백이 있으면 안된다!!

 

끝~

 

저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

Spring jmsTemplate 사용하기

OpenSource/Spring 2013.03.26 00:18
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



2013/03/22 - [OpenSource/Spring] - HornetQ, JMS Client using Springframework and Maven
2013/03/22 - [Was/JBOSS] - JBoss의 미들웨어에 Hornetq를 설치

내가 했던 작업은 이러하다.

1. JBoss에 Hornetq를 설치(Hornetq install을 구해 ant로 빌드 ant -f build.xml
2. JBoss에 설치 된 Hornetq의 xml 설정을 추가(Queue, Topic, ConnectionFactory등)
3. Spring에 Context 파일을 추가(jms template사용)

이러한 작업을 통해서..sample소스까지도 무리 없이 돌아간다.
하지만..어떻게 돌아가는지 궁금하다...그래서 찾아보았다^-^good~



Listing 1 shows the configuration of the JMS template used for the example application.
(리스팅 1은 설정파일을 보여준다. JMS 템블릿의 예제로 사용되어진)

The listing is an extract from the spring-mqseries-jms.xml file (see Download).
(리스팅은 발췌했다 spring-mqseries-jms.xml 파일에서~)

jms template 설정파일은 아래와 같다!

Listing 1. JMS template configuration

              
  <!-- JMS Queue Template -->
  <bean id="jmsQueueTemplate" 
          class="org.springframework.jms.core.JmsTemplate102">
    <property name="connectionFactory">
      <ref bean="jmsQueueConnectionFactory"/>
    </property>
    <property name="destinationResolver">
      <ref bean="jmsDestinationResolver"/>
    </property>
    <property name="pubSubDomain">
      <value>false</value>
    </property>
    <property name="receiveTimeout">
      <value>20000</value>
    </property>
  </bean>

The jmsQueueTemplate bean is wired with a JMS connection factory and a JMS destination resolver for resolving destination queue names supplied by JMS clients through JNDI. The connectionFactory property specifies how to get a connection to a JMS provider. In the case of the example, Listing 2 shows how to retrieve the connection factory from JNDI.


Listing 2. Configuring a JMS connection factory through JNDI

이 방법이 내가 썼던 방법이다. JNDI : Java Naming Directory Interface <!-- JMS Queue Connection Factory --> <bean id="internalJmsQueueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiTemplate"> <ref bean="jndiTemplate"/> </property> <property name="jndiName"> <value>MQ_JMS_MANAGER</value> </property> </bean>

As you can see, the JndiObjectFactoryBean is wired to an internalJmsQueueConnectionFactory. The JndiObjectFactoryBean uses the JndiTemplate property for JNDI lookup. Spring will look up the connection factory in JNDI using the environment property and initial context specified in the JndiTemplate. Listing 3 shows the configuration of the JndiTemplate configuration bean.


Listing 3. JNDI template configuration for JNDI lookup

웁쓰~ 내가 썼던 방법이다..Listing2 에서 Listing 3으로 이어진다..wow~
위의 초록색 부분 처럼 스프링은 찾는다. 커넥션 팩토리를 JNDI안에서 환경 속성과 JndiTemplate의
명시된 초기 컨텍스트에서! 스프링은 찾는다~~~!!! JNDI or JndiTemplate Context에서..
커넥션 팩토리를^^
아래에서 커넥션 팩토리를 찾는다는 말이다~스프링은^_^good~
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">    
    <property name="environment">
       <props>    
            <prop key="java.naming.factory.initial">
                     com.sun.jndi.fscontext.RefFSContextFactory
            </prop>
            <prop key="java.naming.provider.url">
                   file:/C:/JNDI-Directory   // the provider URL
             </prop>   
       </props>
    </property>
</bean>

The above configuration specifies the initial context factory as com.sun.jndi.fscontext.RefFSContextFactory and the provider URL as the file-based file:/C:/JNDI-Directory for JNDI lookup. For the purpose of the example application,
the JNDI access will use the file-based FSContext version (see Resources) configured for binding MQ queues to JNDI.

더 많은 내용은~참고자료!
http://www.ibm.com/developerworks/java/library/wa-spring4/index.html

참고!! Jms Template API(Spring 3.0.x)
http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/jms/core/JmsTemplate.html

조금 더 detail 한 내용은 회사에 가서 소스와 함께 알아봐야겠다!!

일단 -끝-

저작자 표시 비영리 변경 금지
신고

'OpenSource > Spring' 카테고리의 다른 글

Bug  (0) 2013.06.21
@Vaild 처리 시 주의 할 사항!!  (0) 2013.06.21
Spring jmsTemplate 사용하기  (0) 2013.03.26
HornetQ, JMS Client using Springframework and Maven  (0) 2013.03.22
@XMLAccessorType, @XMLRootElement  (0) 2013.01.21
spring bean 등록 방법  (0) 2013.01.04

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

HornetQ, JMS Client using Springframework and Maven

OpenSource/Spring 2013.03.22 17:58
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


spring에서 JMS > HornetQ를 쓸려고 찾아보다 보니..
http://www.javacodegeeks.com/2010/06/spring-3-hornetq-21-integration.html

요런 튜토리얼이 있었고 거기에는..
  • /lib/hornetq-bootstrap.jar
  • /lib/hornetq-core.jar
  • /lib/hornetq-jms.jar
  • /lib/hornetq-logging.jar
  • /lib/jnpserver.jar
  • /lib/netty.jar
  • 요런것들이 필요하다~~라고 되어있었지만..현재 프로젝트는 메이븐 프로젝트였다..

    다시 찾아봤더니..아래에 좋은 사이트를 발견하였다^^

    외국인 친구 땡큐!

    펌] http://www.future-edge.nl/blog/hornetq-jms-client-using-spring-and-maven/

    I’ve just been working getting working in our project. We are using Spring and Maven.

    Here is an example to get it working:

    Maven dependency configuration:

        <!-- JMS -->
        <dependency>
            <groupId>javax.jms</groupId>
            <artifactId>jms-api</artifactId>
            <version>1.1-rev-1</version>
        </dependency>
    
        <!-- HornetQ -->
        <dependency>  		
            <groupId>org.hornetq</groupId>
            <artifactId>hornetq-core-client</artifactId>
            <version>2.2.18.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hornetq</groupId>
            <artifactId>hornetq-jms-client</artifactId>
            <version>2.2.18.Final</version>
        </dependency>
        <dependency>  
            <groupId>org.jboss.netty</groupId>  
            <artifactId>netty</artifactId>  
            <version>3.2.7.Final</version>
        </dependency>  	
    

    Note you *DON’T* need the hornetq-transports dependency. There is a lot of old ‘help’ with only seems to work using version 2.0.0.GA with did use that JAR.

    Spring configuration:

        <bean name="qConnectionFactory" class="org.hornetq.jms.client.HornetQXAConnectionFactory" >
        <constructor-arg value="false" />
         <constructor-arg>
            <bean name="transportConfiguration" class="org.hornetq.api.core.TransportConfiguration">
                <constructor-arg value="org.hornetq.core.remoting.impl.netty.NettyConnectorFactory" />
                <constructor-arg>
                    <map key-type="java.lang.String" value-type="java.lang.Object">
                        <entry key="host" value="127.0.0.1" />
                        <entry key="port" value="5445" />
                    </map>
                </constructor-arg>
            </bean>
         </constructor-arg>
        </bean>
        
        <bean name="theQueue" class="org.hornetq.jms.client.HornetQQueue">
           <constructor-arg value="someName" />
        </bean>
        
        <bean name="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
            <property name="connectionFactory" ref="qConnectionFactory" />
            <property name="defaultDestinationName" value="theQueue" />
        </bean>    
    

    Note the class used to configure the netty connector factory. That’s what is different between the 2.2.18 version (it’s in the core now) and the 2.0.0.

    저작자 표시 비영리 변경 금지
    신고

    'OpenSource > Spring' 카테고리의 다른 글

    @Vaild 처리 시 주의 할 사항!!  (0) 2013.06.21
    Spring jmsTemplate 사용하기  (0) 2013.03.26
    HornetQ, JMS Client using Springframework and Maven  (0) 2013.03.22
    @XMLAccessorType, @XMLRootElement  (0) 2013.01.21
    spring bean 등록 방법  (0) 2013.01.04
    decompiler for eclipse  (0) 2012.11.14

    acet 박태하가 추천하는 readtrend 추천글!

    설정

    트랙백

    댓글

    :::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

    @XMLAccessorType, @XMLRootElement

    OpenSource/Spring 2013.01.21 11:39
    [Good Comment!!, Good Discussion!!, Good Contens!!]
    [ If you think that is useful, please click the finger on the bottom~^-^good~ ]
    by ace-T
    @XMLAccessorType, @XMLRootElement에 대해서 알아보자!^-^good~

    아래를 읽기전에  JAXB?? 이거 모르시는 분은 아래 링크 꾹~~^-^good~!

    더보기



    @XMLAccessorType                    

    더보기



    또 다른 녀석~!!
    @XMLRootElement

    더보기


    정리 해보면
    @XMLAccessorType는 bound to xml(JAXB기반 직렬화 object->xml)을 하는데 있어서 범위? 방식을 정하는 것이다. Field면 정적이지 않거나 임시적이지 않는 필드여야만 한다. 이러한 방식!

    @XMLRootElement는 정보라고 보면 된다. object가 xml로 bound가 되어 질 때
    아래와 같은 2가지 정보를 준다고 보면 된다.
    • a top level class
    • an enum type

    정보를 주는 방식은 위에 보면 예제를 들어서 설명을 하고 있다.
    특히 3번째 예제를 많이들 쓴다.
    ※ Example 3: Associate a global element with XML Schema type to which the class is mapped. 

    추신..: 
    xml 스키마 타입(클래스가 mapped된)을 가진 글로벌요소를 결부짓다???? 연합시키다??--;;
      Associate 는 뭐라고 해석해야하지..난감하다 ㅎㅎ느낌은 알꺼 같은데...;;

      -끝-
     
    저작자 표시 비영리 변경 금지
    신고

    acet 박태하가 추천하는 readtrend 추천글!

    설정

    트랙백

    댓글

    :::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

    spring bean 등록 방법

    OpenSource/Spring 2013.01.04 15:54
    [Good Comment!!, Good Discussion!!, Good Contens!!]
    [ If you think that is useful, please click the finger on the bottom~^-^good~ ]
    by ace-T


    spring을 거의 대부분이 mvc 요즘은 @mvc를 사용 한다. @mvc는 어노테이션을 사용하는 mvc를 말한다.
    그래서 인지 자바 stand alone 형태에서는 빈을 가지고 노는걸 잘 모르는 경우가 많다.

    우선 방법은 spring mvc와 spring bean을 자바단에서 빈을 등록 시키고 DI 해주는게 있다는 것을 전제 하에
    알아 보도록 하겠다.

    spring @mvc는 간단히 설명을 하면 was가 기동 되어질 때 bean이 등록 되어진다. 등록 되어진 bean을 와이어링(@Autowired)을 하여 연결 해준다. 아마도..C로 말하면 주소값을 가져오는 것 같다. 그래서 그 객체를 가지고 쓸 수 있도록 한다.

    이제 이 페이지에서 알아 볼 것은 자바단에서 빈을 등록 시키고(context 호출) 사용하는 방법을 2가지로 알아 보겠다.

    spring의 모든 것을 외우기는 힘드니깐 찾아 볼 수 있도록 토비책을 옆에 두면 더 좋을 것이다^^;
    자바에서 configuration을 가져와서 bean을 등록 시켜주는 것을 전혀 안쓸 줄 알았는데..쓰인다!! ㅋㅋ

    1) 첫번째 방법

      public class OssMain {
     
     public OssMain(){}
     
     
     /**
      * @param args 
      */
     
     public static void main(String[] args) {
      // TODO Auto-generated method stub
      System.out.println("##########start################");
      ApplicationContext context = new GenericXmlApplicationContext("classpath:spring/context2/context-*.xml");
      
      KtOssService ktOssService = context.getBean("ktOssService",KtOssService.class);
      List<UpSoworkOdrSelectVo> aa = ktOssService.callOssProc();    
      System.out.println("##########end################");
      System.out.println("##SCN##=>"+aa.toString());
      
      
     }

    }


    2) 그 외 소스는 생략 하도록 하겠다 사실  main에서 잡아주는 부분이 핵심이기 때문이다.
    그래서 더 보자면 위의 GenericXmlApplicationContext을 사용하여 context-*.xml을 다 읽어드린다.
    여러개의 xml 중 <context:component-scan base-package="kr.pe.acet"/>
    component-scan이라는 녀석이 있다. 명명에서도 보다 시피 스캔!!을 한다.
    그래서 빈으로 전부 등록 시켜줘버린다.
    tip. <context:annotation-config"/> : XML로 등록된 빈의 의존관계 정보 애노테이션을 이용해서 의존관계 메타정보를 추가해주는 빈 후처리기가 등록 된다.
    <context:component-scan base-package="kr.pe.acet"/>

    2) 두번째 방법 : @RunWith,  @ContextConfiguration 을 사용하는 테스트 컨텍스트 프레임워크를 사용!!


    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = {
      "classpath:spring/context2/context-osscommon.xml",
      "classpath:spring/context2/context-datasource.xml",    
      "classpath:spring/context2/context-mybatis.xml", 
      
      })

    public class OssMain {
     
     @Autowired
     KtOssService ktOssService;
     
     public OssMain(){}
     
     @Test
     public void startProcedure() {    <--- (public static void main(String[] args)였는걸 메소드 형태로!!)
      // TODO Auto-generated method stub
      System.out.println("##########start################");
      //ApplicationContext context = new GenericXmlApplicationContext("classpath:spring/context2/context-*.xml");
      
      //KtOssService ktOssService = context.getBean("ktOssService",KtOssService.class);
      List<UpSoworkOdrSelectVo> aa = ktOssService.callOssProc();    
      System.out.println("##########end################");
      
      //UpSoworkOdrSelectVo aa = om.callService();
      System.out.println("##SCN##=>"+aa.toString());
      
     }

    }


    스프링의 최고의 장점으로 테스트를 말하고 있다.
    아직 테스트 코드에 능숙하지는 않지만 하나하나씩 습득해야 할 것 같다.

    - 끝 -



    저작자 표시 비영리 변경 금지
    신고

    acet 박태하가 추천하는 readtrend 추천글!

    설정

    트랙백

    댓글

    :::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

    decompiler for eclipse

    OpenSource/Spring 2012.11.14 16:36
    [Good Comment!!, Good Discussion!!, Good Contens!!]
    [ If you think that is useful, please click the finger on the bottom~^-^good~ ]
    by ace-T

    소스를 까볼려고했는데..xxx.class 파일이라서..보이지가 않는다..--;;
    그래서 jad라는것이 떠올라 마켓이나 install and software를 통해 플러그인을 설치 하려고 했으나..
    링크가 끊겨있었다...
    그래서! 다른 방법으로 플러그인을 설치 할려고 한다.

    [1] eclipse에 decompiler를 장착 해보자!ㅋ

    아래의 페이지를 참고 하였다.
    http://www.mkyong.com/java/java-decompiler-plugin-for-eclipse/

    Java Decompiler Plugin For Eclipse IDE

    1) 다운로드 제드

    더보기

    1)에서 jad.exe를 얻을 수가 있다. 이젠 이클립스 플러그인을 깔고 연동 시키면 된다.^-^good~

    2) Download Jad Eclipse plugin
    Download the Jad Eclipse plugin named “Jabclipse (net.sf.jadclipse_x.x.x.jar)
     
    http://sourceforge.net/projects/jadclipse/ 

     
    3) Copy it to Eclipse plugin folder
    Copy the downloaded Jad Eclipse plugin – Jabclipse(jadclipse_x.x.x.jar) to Eclipse plugin folder.
    For example,
      
    D:\eclipse\plugins\net.sf.jadclipse_3.3.0.jar
     
    P.S No need to extract it, just copy the whole jar file.

    아래의 그림처럼 플러그인 디렉토리에 다운받은 이클립스 플러그인을 넣어준다.

     

    4) Restart Eclipse 재시작^-^

    Restart Eclipse to make the plugin take effect.


    5) Configure Jadclipse in Eclipse

    In Eclipse, Click Window –> Preference –> Java –> Jadclipse , Key in Jad’s path in “Path to Decompiler” field
    경로를 잡아줄 때는 풀path로 아래처럼 해주거나 jad 라고 써놓고 환경변수에다가 경로를 잡아주고 하는 방법이 있다.
    보통 jdk path가 환경변수에 잡혀있기 때문에 bin아래에 넣어두고 Path to decompiler에는 jad라고 적혀있는 그대로 두면 된다.^-^good~~


    혹시나 에러가 난다면?!
    아래와 같이 default 유무를 확인 해본다.
    경로는 Window > Preferences > General > Editors > File Associations 이다^-^
    *.class를 선택하고 확인 하면 된다.



    6) Done
    In Eclipse, try F3 into any class which does not has the source, Jad will decompile it automatically. 

    F3이 보통 소스 따라 갈 때 보면 컨트롤+메소드 해서 가는 단축기이다.

    가고자하는 메소드에 마우스로 찍어놓고 F3을 누르면 해당 class가 역컴파일되어 소스가 보여지게 된다.



    7) 정말 중요한..jad 사용법!!!
         6번에서 처럼 F3을 이용한...decompile이 되어진다. 
          그것도 모르고..삽질을 올골차게 하였다..뉴뉴..
          왜냐면 테스트를 아래와 같이 하였을 때 오류가 났기 때문이다.
     


    알아보니 위와 같이 하면 안된다고 한다...ㅜ_ㅜ ..
    F3 or Ctrl+메소드 등으로 하면 된다..^-^b
     

    위에처럼 했을 때 결과는..

    /*jadclipse*/// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov.
     
    // Jad home page: http://www.kpdus.com/jad.html
     
    // Decompiler options: packimports(3) radix(10) lradix(10) 

    위와 같은 주석이 달리면서 자바코드로 변환이 된다.^-^good~~~ 

    - 끝 -
     

     
    저작자 표시 비영리 변경 금지
    신고

    acet 박태하가 추천하는 readtrend 추천글!

    설정

    트랙백

    댓글

    :::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

    어플리케이션 컨텍스트의 동작 원리

    OpenSource/Spring 2012.11.05 21:41
    [Good Comment!!, Good Discussion!!, Good Contens!!]
    [ If you think that is useful, please click the finger on the bottom~^-^good~ ]
    by ace-T
    ""
    토비의 스프링 1장에서 가장 중요한 부분이라고 생각되어진다

    이것을 바탕으로 Bean의 스코프와 빈의 동작원리를 파악하여 기존 자바, 스트럿츠 등의 다른 것들과의 객체 생성의 차이와 의존성 주입에 대해서 더욱 알 수가 있다.
    언제 DI가 되어지고 어떤 방식으로 DI가 수행되어지냐?
    앞으로 토비책이 나에게 더욱 흥미진진하게 알려줄것이다.

    다음 스터디 3~5장을 기대하여 본다^-^!

    안드로이드에서 작성 함^-^good~
    신고

    설정

    트랙백

    댓글

    :::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

    [오류] Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

    OpenSource/Spring 2012.10.28 03:15
    [Good Comment!!, Good Discussion!!, Good Contens!!]
    [ If you think that is useful, please click the finger on the bottom~^-^good~ ]
    by ace-T

    오류
    Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

    해결 방안
     아래처럼 Connectors의 jar를 mysql홈페이지에가서 받는다.
    http://www.mysql.com/downloads/connector/j/



    그런 뒤에 이클립스에서 lib(jar)를 추가해준다.

    저작자 표시 비영리 변경 금지
    신고

    acet 박태하가 추천하는 readtrend 추천글!

    설정

    트랙백

    댓글

    :::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

    [Spring 환경 구축] step 02 - MySQL을 깔아보자~~~(Windows)

    OpenSource/Spring 2012.10.28 02:29
    [Good Comment!!, Good Discussion!!, Good Contens!!]
    [ If you think that is useful, please click the finger on the bottom~^-^good~ ]
    by ace-T
    개발에 있어서 데이터베이스..정말 중요한!!~녀석이다.

    그중에 MySQL이라는 녀석은..돈없는 일반 서민들에게 한줄기 빛이 아닐 수가 없다!!^-^
    왜냐면 꽁짜니깐! ^-^

    자~! 셋팅을 위해 아래의 주소로 간다.
    go~! : http://www.mysql.com/downloads/

    1) 아래의 그림처럼 떡~하니 다운로드를 하라고 나온다^-^good~



    2) 아래의 그림처럼 OS에 맞는 환경을 체크 한뒤에 다운로드를 한다!
    인스톨러는 exe 확장자가 아닌 msi 확장자이다. 떱 클립하면 수행 된다고 한다.



    3) 그 다음으로 역시나 정보를 적는 것이 나온다. 그러나 적지 않고 다운 받을 수 가 있다.



    그러나..글쓴이는 아래의 사이트로 이동 하여
    http://www.mysql.com/downloads/mysql/
    zip파일을 다운 받았다.
    무지..오래걸린다-_-;;; 2시간 이상 걸릴꺼 같다...흐미..12시인데 지금 ㅋㅋㅋㅠ_ㅠ...


    다 받았으면 본격적인 셋팅을 해보자^-^
    1) zip파일을 다 받았으면 압축을 풀자!
    2) 압축을 풀고, bin/ 디렉토리까지의 경로를 환경변수 path에 등록하자!
    D:\Spring\mysql-5.5.28-win32\mysql-5.5.28-win32\bin
    참고그림


    3) cmd 명령 프롬프트창을 열고 bin이 있는 곳까지 이동 한다.


    4) 자! 이제 인스톨을 해보자~~~+ㅁ+ 
       설치 명령어는 mysqld --install  이다.
       제거 명령어는 mysqld --remove 가 되겠다.


    5) 설치를 했다면 가동 시켜보자!
         가동 시키는 위치는 제어판 > 관리도구 > 서비스를 통해서 "start" 시킬 수 있다.
         (물론 명령어로도 수행 시킬 수 가 있다.)


    6) 가동 시켰다면 제대로 연결이 되는지 테스트 해보자!!
        도스 프롬프트 창에서 mysql -uroot를 통해서 접속하여 보자!~^-^good



    자! 이제..계정을 생성 하거나 테이블을 만들거나 하는 액션을 취하면 된다^-^good~

    - 끝 -


    2012/10/28 - [DataBase] - MySQL 기본 문법(데이터베이스 보기, 사용하기)


    참고사이트 : http://www.javamaster.org/lecture/mysql/mysql_install.html

    저작자 표시 비영리 변경 금지
    신고

    acet 박태하가 추천하는 readtrend 추천글!

    설정

    트랙백

    댓글

    :::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

    [Spring 환경 구축] step 01 - 스프링 STS 를 깔아보자^-^

    OpenSource/Spring 2012.10.27 23:25
    [Good Comment!!, Good Discussion!!, Good Contens!!]
    [ If you think that is useful, please click the finger on the bottom~^-^good~ ]
    by ace-T

    http://www.springsource.org/sts 로 가서
    다운로드를 위해 옆의 URL로 이동한다. http://www.springsource.org/spring-tool-suite-download

    다운로드를 위해 작성 해주는 부분이 있다.


    데이터를 입력 후 Submit을 하면 아래 처럼 다운로드를 할 수 있는 페이지가 나온다.



    글쓴이는
    spring-tool-suite-3.1.0.RELEASE-e4.2-win32.zip
    를 다운 받았다^-^

    압축을 풀어보니..이름이 하도 길어서..실패(3)을 볼 수 있었다..
    anyway, 압축을 풀고 난 모습이다. 여기에 보면 maven이라는 녀석도 볼 수 있고, vfabric~블라블라를 보면
    톰캣 또한 볼 수가 있다. ^-^good~


    sts-3.1.0.RELEASE로 가서 sts를 실행 시키면, workspace 지정 후 아래와 같은 그림을 볼 수 가 있다^-^



    그냥..이클립스라고 보면 된다. 스프링쪽에서 만든..^-^/
    - 끝 -

    저작자 표시 비영리 변경 금지
    신고

    acet 박태하가 추천하는 readtrend 추천글!

    설정

    트랙백

    댓글

    :::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

    Spring Batch

    OpenSource/Spring 2012.08.24 13:40
    [Good Comment!!, Good Discussion!!, Good Contens!!]
    [ If you think that is useful, please click the finger on the bottom~^-^good~ ]
    by ace-T

    Spring Batch ??
    이것은 무엇인가?!

    좋은 사이트 하나를 발견 하였다^-^good~
    http://static.springsource.org/spring-batch/



    내용은 학습 한 뒤에 찬찬히 올려야겠다.^-^good~

    저작자 표시 비영리 변경 금지
    신고

    acet 박태하가 추천하는 readtrend 추천글!

    설정

    트랙백

    댓글

    :::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

    Spring XML을 이용한 설정

    OpenSource/Spring 2012.08.16 17:09
    [Good Comment!!, Good Discussion!!, Good Contens!!]
    [ If you think that is useful, please click the finger on the bottom~^-^good~ ]
    by ace-T
    스프링의 애플리케이션 컨텍스트는 XML에 담긴 DI정보를 활용 할 수 있다.

    DI 정보가 담긴 XML 파일은 <beans>를 루트 엘리먼트로 사용한다.
    <beans>는 이름에서도 알 수 있듯이 여러개의 <bean>을 정의 할 수 있다.

    아래의 그림처럼 http://acet.pe.kr/120  에서의 @configuration과 @bean을 각 @configuration을 <beans>
    @bean을 <bean>이라고 대응해서 생각하면 더 쉬울 것 이다.

    [참고 그림]


    클래스 설정과 xml설정의 대응항목
       자바 코드 설정정보  XML 설정정보
     빈 설정파일  @Configuration  <beans>
     빈의 이름  @Bean methodName()  <bean id="methodName"
     빈의 클래스  return new BeanClass();  class="a,b,c...BeanClass">

    ex) connectionMaker()메소드의 <bean> 태그 전환
    @Bean   --------------------------------> <bean
    pubilc ConnectionMaker
        connectionMaker(){ -------------------> id="connectionMaker"
             return new DConnectionMaker(); ----> class="springbook...DConnectionMaker" />
        }


    ※ <property> 태그를 사용해 의존 오브젝트와의 관계를 정의 해보자.
    <property> 태그는 name과 ref라는 두개의 애트리뷰트를 갖는다.
    name은 애트리뷰트의 이름이다. 이 프로퍼티 이름으로 수정자 메소드를 알 수 있다.
    ref는 수정자 메소드를 통해 주입해줄 오브젝트 빈 이름이다.

    ex) userDao.setConnectionMaker(connectionMaker()); 를 아래와 비교해보라.
    <property name="connectionMaker" ref="connectionMaker" />

    <property> tag를 <baen> tag안에 넣어주면 된다.
    ex)
         <bean id="userDao" class="springbook.dao.UserDao">
                 <property name="connectionMaker" ref="connectionMaker" />
          </bean>

    이첨럼 <bean> tag를 이용해 @Bean 메소드를 모두 xml로 변환 했다.
    마지막으로 <beans> tag로 감싸주면 된다.
    ex)
    <beans>
        <bean id="connectionMaker" class="springbook.user.dao.DConnectionMaker" />
        <bean id="userDao" class="springbook.dao.UserDao">
              <property name="connectionMaker" ref="connectionMaker" />
        </bean>
    </beans>

    ※ <property> tag의 name과 ref는 그 의미가 다르므로 이름이 같더라도 어떤 차이가 있는지 구별 할 수 있어야 한다.
    name 애트리뷰트DI에 사용할 수정자 메소드의 프로퍼티 이름이며, ref 애트리뷰트주입할 오브젝트를 정의한 빈의 ID(DI 받을 빈을 지정) 이다. 보통 프로퍼티이름과 DI되는 빈의 이름이 같은 경우가 많다.

    저작자 표시 비영리 변경 금지
    신고

    acet 박태하가 추천하는 readtrend 추천글!

    설정

    트랙백

    댓글

    :::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

    DI(Dependency Injection)

    OpenSource/Spring 2012.08.09 17:06
    [Good Comment!!, Good Discussion!!, Good Contens!!]
    [ If you think that is useful, please click the finger on the bottom~^-^good~ ]
    by ace-T



    출처 : 토비의 스프링 3
    DI(Dependency Injection) : 의존관계 주입!

    배경 : IoC의 너무 넓은 의미=> Spring의 기능, 특징을 한마디로 표현 X => DI 라는 용어를 만듬.

    DI는 외부로부터 레퍼런스를 제공받고, 이를 통해 여타 오브젝트와 다이나믹하게 의존관계가 만들어지는 것이 핵심이다.

    의존관계 주입은 다음과 같은 세가지 조건을 충족하는 작업을 말한다.
    1) 클래스 모델이나 코드에는 런타임 시점의 의존관계가 드러나지 않는다. 그러기 위해서는 인터페이스에만 의존하고 있어야 한다.
    2) 런타임 시점의 의존관계는 컨테이너나 팩토리 같은 제3의 존재가 결정한다.
    3) 의존관계는 사용할 오브젝트에 대한 레퍼런스를 외부에서 제공(주입) 해줌으로써 만들어진다.

    다시 또 말해보면 DI는 자신이 사용할 오브젝트에 대한 선택과 생성 제어권을 외부로 넘기고 자신은 수동적으로 주입받은 오브젝트를 사용한다는 점에서 IoC의 개념에 잘 들어맞는다.

    스프링이 제공하는 IoC방법은 의존관계주입(DI)만 있는 것이 아니다.
    코드에서는 구체적인 클래스에 의존하지 않고, 런타임 시에 의존관계를 결정한다는 점에서 의존관계 주입과 비슷하지만, 의존관계를 맺는 방법이 외부로부터의 주입이 아니라 스스로 검색을 이용하기 때문에 의존관계 검색(dependeny lookup)이라고 불리는 것도 있다. 의존관계 검색은 자신이 필요로 하는 의존 오브젝트를 능동적으로 찾는다. 물론 자신이 어떤 클래스의 오브젝트를 이용할지 결정하지는 않는다. 그러면 IoC라고 할 수는 없을 것이다. 의존관계 검색은 런타임 시 의존관계를 맺을 오브젝트를 결정하는 것과 오브젝트의 생성작업은 외부 컨테이너에게 IoC로 맡기지만, 이를 가져올 때는 메소드나 생성자를 통한 주입 대신 스스로 컨테이너에게 요청하는 방법을 사용한다.

    스프링의 IoC컨테이너인 애플리케이션 컨텍스트는 getBean()이라는 메소드를 제공한다. 바로 이 메소드가 의존관계 검색에 사용 된다.

    ex)

    public UserDao(){
      AnnotationConfigApplicationContext context =
                                           new AnnotationConfigApplicationContext(DaoFactory.class);

       this.connectionMaker = context.getBean("connectionMaker", ConnectionMaker.class);
    }

    ※ DI를 원하는 오브젝트는 먼저 자기자신이 컨테이너가 관리하는 빈이 돼야 한다는 사실을 잊지 말자.
        스프링의 핵심인 IoC와 DI는 오브젝트의 설계와 생성, 관계 사용에 관한 기술 이다.

    의존관계 검색과 의존관계 주입에서의 차이는
       의존관계 검색 방식에서는 검색하는 오브젝트는 자신이 스프링의 빈일 필요가 없다는 점이다.

    스프링은 DI를 편하게 사용 할 수 있도록 도와주는 도구이면서 그 자체로 DI를 적극 활용한 프레임워크 이기도 하다. 그래서 스프링을 공부하는 건 DI를 어떻게 활용해야 할지를 공부하는 것이기도 하다.

    DI는 생성자 뿐만 아니라 수정자 메소드(setter), 일반메소드(set으로 시작) 등으로도 구현이 가능.
    저작자 표시 비영리 변경 금지
    신고

    acet 박태하가 추천하는 readtrend 추천글!

    설정

    트랙백

    댓글

    • 초보 2013.01.24 03:08 신고 답글 | 수정/삭제 | ADDR

      아래의 의존관계 주입과 검색의 차이점이 잘 이해가 안됩니다.

      의존관계 검색 방식에서는 검색하는 오브젝트는 자신이 스프링의 빈일 필요가 없다는 점이다.

      검색하는 오브젝트는 UserDao이며 UserDao는 빈으로 등록되어야 한다는 뜻인가요?

      답변 부탁드립니다.

      • Favicon of http://acet.pe.kr BlogIcon String Ace-T 2013.01.24 16:27 신고 수정/삭제

        네 안녕하세요^^
        문의 하신 "의존관계 검색 방식에서는 검색하는 오브젝트는 자신이 스프링의 빈일 필요가 없다는 점이다" 이 문구만으로는 조금 이해하시기 어려우실꺼라 생각이 드네요^^;; 제가 더 자세하게 기술을 했어야 했는데 너무 포인트만 적어놨네요;

        위의 문구를 이해하실려면
        더 상단에 적힌 3개의 조건을 이해 하셔야 합니다.
        의존관계 주입은 다음과 같은 세가지 조건을 충족하는 작업을 말한다.
        1) 클래스 모델이나 코드에는 런타임 시점의 의존관계가 드러나지 않는다. 그러기 위해서는 인터페이스에만 의존하고 있어야 한다.
        2) 런타임 시점의 의존관계는 컨테이너나 팩토리 같은 제3의 존재가 결정한다.
        3) 의존관계는 사용할 오브젝트에 대한 레퍼런스를 외부에서 제공(주입) 해줌으로써 만들어진다.

        3가지 내용은 토비1권을 보시면 됩니다.
        또한 지금 위의 3가지는 의존관계에 대해서 강조 하고 있습니다.
        다시 말씀 드리면 DI / DL의 큰 차이는 "의존관계"가
        가장 큰 차이라고 할 수 있겠네요
        DI는 서로 의존 관계가 있죠! 어떤걸로? interface로요~ 1)번 사항 참고
        즉 userDao 쓸려면 connection이 되어야 하죠^^ (의존관계가 서로 있다는 뜻, 즉 둘 다 bean이 등록이 되어야 함.) 외부주입은 setter나 생성자로 보통 하죠~

        DL은 getBean()을 통해서 해당 connectionMaker을 가져올 지라도 usrDao는 빈으로 등록 할 필요가 없다는 뜻이에요 new해서 객체 생성 해도 무관하다는 것이죠

        문의 하신 "검색하는 오브젝트는 UserDao이며 UserDao는 빈으로 등록되어야 한다는 뜻인가요?" 에서 반대로 UserDao가 빈으로 등록되지 않아도 된다는 뜻이라고 생각하시면 됩니다. DL에서요^^

        음..설명을 잘못해서..더 헷깔리실 수 있겠지만..토비 1권을 조금 참조 하시면서 보시면 이해가 가실꺼라 생각합니다^^;

        참고사항으로
        http://acet.pe.kr/220과 http://acet.pe.kr/183 을 보시면 좋을 것 같네요

        열공하세요~~~

    :::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

    IoC(Inversion of Control)

    OpenSource/Spring 2012.08.07 14:52
    [Good Comment!!, Good Discussion!!, Good Contens!!]
    [ If you think that is useful, please click the finger on the bottom~^-^good~ ]
    by ace-T

    출처 : 토비의 스프링3

    Spring에서 많이 알려진 용어 이다.

    IoC(Inversion of Control) : 제어의 역전

    이 개념을 알기 전에 먼저 Spring에서의 Factory에 대해서 알아보자.

    팩토리 : 객체의 생성 방법을 결정하고 그렇게 만들어진 오프젝트를 돌려주는 것인데, 이런 일을 하는 오프젝트를 흔히 팩토리라고 부른다.(디자인 패턴의 팩토리와는 다른 것이다.) 

    acet : 음..팩토리...오브젝트!!!! 오브젝트의 생성, 리턴등을 하는 오브젝트!!!!!라고 보여진다!

    간단히 말하면..  
    public class DaoFactory{
        pubilc UserDao userDao(){
            /////////// 팩토리의 메소드는 UserDao 타입의 오브젝트를 어떻게 만들고, 
    // 어떻게 준비시킬지 결정 한다.   ConnectionMaker connectionMaker = new DConnectionMaker();    UserDao userDao = new UserDao(connectionMaker);
    /////////////////////////////////////////////////////////////   return userDao;    } }


    제어의 역전이라는 개념을 알아보자!

    간단히
    프로그램의 제어 흐름 구조가 뒤바뀌는 것이라고 할 수 있다.

    일반적으로는 main() 처럼 프로그램이 시작되는 지점에서 오프젝트를 결정, 생성(new), method 호출, 호출 된 method 안에서 다음에 사용 할 것을 결정 하고 호출 하는 방식이 반복적으로 이루어지고 있다.

    제어의 역전이란 이런 제어 흐름의 개념을 거꾸로 뒤집는 것이다.
    오브젝트가 자신이 사용 할 오브젝트를 스스로 선택하지 않는다. 어떤 객체를 만들지 생각하지 않는 다는 말.
    당연히 생성 하지도 않는다. 

    모든 제어 권한이 자신이 아닌 다른 대상에게 위임하기 때문이다.

    ex) A Class에서 getAcetInfo()같은 메소드가 구현 되어있다고 하자!! 이 메소드가 언제 어디서 사용 될지는        A Class 자신은 모른다!! 
         다른쪽  B의 method에서  이 구현 된 것을 제어 하는 것이 바로 제어의 역전!!!!!
         대충 이런 개념인 것이다. ^0^good~

    이제 Spring에서의 Ioc에 대해서 알아보자!
    우선 아래의 그림을 참고하도록 하자!


    [IoC와 object Factory의 관계]

    acet : factory라는 오브젝트에 대해서 위에서 알아보았다. 객체를 생성, 리턴을 하는 일을 하는 오브젝트!!
    IoC는 제어의 역전이라고 해서 생성, 리턴 등을 하는 일을 자기자신이 아닌 다른쪽에서 제어를 하는 것이라고 이해했다. 즉, IoC의 개념에서 보면 생성,리턴을 하는건 factory!! 그런데 그것을 다른쪽에서 제어하는 것이라고 생각하면 좋을 것 같다!(더 헷깔리게 말했나;;)


    Spring에서는 Spring이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트를 bean(빈)이라고 부른다.
    bean : 자바빈 or EJB에서 말하는 빈과 비슷한 오프젝트 단위의 애플리케이션 컴포넌트를 말한다.

    또한, Spring Bean은 컨테이너 생성과 관계설정, 사용 등을 제어해주는 제어의 역전이 적용된 오브젝트를 가리키는 말이다.

    Spring에서는 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트를 bean factory라고 부른다.

    참고사항 :
    애플리케이션 컨텍스트 - bean factory보다는 이를 좀 더 확장한 것, IoC 방식을 따라 만들어진 일종의 bean factory라 생각 하면 된다.
    스프링 컨테이너라고 부르기도 한다.

    애플리케이션 컨텍스트 동작 방식
    애플리케이션 컨텍스트는 애플리케이션에서 IoC를 적용해서 관리할 모든 오브젝트에 대한 생성과 관계설정을 담당한다. ApplicationContext 인터페이스를 구현.

    Application Context에는 직접 오브젝트를 생성하고, 관계를 맺어주는 코드가 없고, 그런 생성정보와 연관관계 정보를 별도의 설정정보를 통해 얻는다. 
    @Configuration이 붙어있으면 애플리케이션 컨텍스트가 활용하는 IoC 설정 정보다.

    ex) 

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    ...
    @Configuration => 애플리케이션 컨텍스트 또는 빈 팩토리가 사용할 설정정보라는 표시
    public class DaoFactory{
       @Bean         => 오브젝트 생성을 담당하는 IoC용 메소드라는 표시
       public UserDao(){
           return new UserDao(connectionMaker());
       }
       @Bean
       public   ConnectionMaker connectionMaker(){
           return new DConnectionMaker();
       }
    }                                        



    ★ 스프링 IoC 용어정리
      1) Bean 
       빈 또는 빈 오브젝트는 스프링이 IoC방식으로 관리하는 오브젝트라는 뜻이다.
       ※ 주의할점은 스프링을 사용하는 애플리케이션에서 만들어지는 모든 오브젝트가 다 빈은 아니라는 사실!!
       그중에서 스프링이 직접 그 생성과 제어를 담당하는 오브젝트만을 빈이라고 부른다.

     2) Bean Factory 
     스프링의 IoC를 담당하는 핵심 컨테이너를 가리킨다.
     빈을 등록.생성, 조회하고 돌려주고, 그 외에 부가적인 빈을 관리하는 기능을 담당한다.
     보통은 이 bean factory를 바로 사용하지 않고, 이를 확장한 애플리케이션 컨텍스트를 이용한다.
     BeanFactory라고 붙여쓰면 빈 팩토리가 구현하고 있는 가장 기본적인 인터페이스의 이름이 된다.
    이 인터페이스에 getBean()과 같은 메소드가 정의 되어있다.

    3) Application Context
    Bean Factory를 확장한 IoC컨테이너이다. 빈을 등록하고 관리하는 기본적인 기능은 빈 팩토리와 동일!
    여기에 스프링이 제공하는 각종 부가서비스를 추가로 제공한다.

    빈 팩토리라고 부를 때는 주로 빈의 생성과 제어의 관점에서 이야기하는 것이고,
    애플리케이션 컨텍스트라고 할 때는 스프링이 제공하는 애플리케이션 지원 가능을 모두 포함해서 이야기 하는 것이라고 보면 된다.

    스프링에서는 빈 팩토리보다 어플리케이션 컨텍스트라는 용어를 많이 사용한다.
    ApplicationContext라고 적으면 애플리케이션 컨텍스트가 구현해야하는 기본 인터페이스를 가리키는 것이기도 하다.
    ApplicationContext는 BeanFactory를 상속한다. <--이런 부분은 직접 코딩을 접해봐야 할 것 같다!

    4) 설정정보/설정 메타정보    
     스프링의 설정정보란 애플리케이션 컨텍스트 또는 빈 팩토리가 IoC를 적용하기 위해 사용하는 메타정보를 말한다. 영어로 Configuration 이라고 하며, 이는 구성정보 내지는 형상정보라는 의미이다.
    실제로 스프링의 설정정보는 컨테이너에 어떤 기능을 셋팅하거나 조정하는 경우에도 사용하지만 그보다도 IoC컨테이너에 의해 관리 되는 애플리케이션 오브젝트를 생성하고 구성 할 때 사용 된다.

    5) 컨테이너 or IoC 컨테이너
     IoC방식으로 빈을 관리하는 의미에서 애플리케이션 컨텍스트나 빈 팩토리를 컨테이너 또는 IoC컨테이너라고도 한다.
    후자는 주로 빈 팩토리 관점에서 이야기 하는 것이고(IoC컨테이너), 그냥 컨테이너 또는 스프링 컨테이너라고 할 때는 애플리케이션 컨텍스트를 가리키는 것이라고 보면 된다.

    acet : 음..대충은 이해가 갔으나..어느정도의 암기가 필요 할 것 같다^0^ good~~
    IoC 아시겠죠잉?? ㅋ

    마지막으로..스프링으로 개발을 하다가 생각했었던 것이 있었다..처음 자바를 시작했을 때 C언어처럼
    객체를 파라미터로 전달하거나 new 연산자를 통해서 객체를 생성하였다.
    또한 Spring으로 개발을 하면서 생각했던 것은..new을 다 없애버렸다고 생각하였다.
    지금  공부해보니..그 기술이 바로..IoC 인 것이다!!!!!+ㅁ+good~~

    - 끝 -




    저작자 표시 비영리 변경 금지
    신고

    acet 박태하가 추천하는 readtrend 추천글!

    설정

    트랙백

    댓글

    • zkimera 2013.02.14 11:48 신고 답글 | 수정/삭제 | ADDR

      좋은 정보 잘 얻어갑니다..ㅎㅎ

      덧글 달았어요..ㅋㅋㅋ

      • Favicon of http://acet.pe.kr BlogIcon String Ace-T 2013.02.18 20:13 신고 수정/삭제

        ㅎㅎㅎㅎㅎ 감사합니다~~
        종종 놀러오세요^-^ 누구신지는 잘모르겠지만여^^;

    :::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

    티스토리 툴바