ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 45일 차 Spring(스프링 프레임워크) AOP 용어정리 및 구현
    삼성SDS_멀티캠퍼스/Spring Frame Work 2015. 11. 11. 10:47
    반응형




    PointCut - 어떤 메소드가 호출되는 시점



    Weaving - 다형성에 의한 동적바인딩 
































    공통관심사항 코드부터 만들고 (MyAspect 로 명명하겠다)


    핵심관심사항이 구현된 객체(Target)를 빈으로 등록

    aop:config태그 안에 pointcut정의, advice들을 aspect로 등록












    공통관심사항(MyAspect.java)


    package aop5;


    public class MyAspect {

    public void before(){

    System.out.println("문을 열고 집에 들어간다");

    }

    public void after_returning(){

    System.out.println("옷 갈아입고 잔다");

    }

    public void after_thirowing(){

    System.out.println("119에 신고한다");

    }

    public void after(){

    System.out.println("문을 열고 집을 나온다");

    }

    }






    그리고 나서 


    Target클래스랑 공통관심사항이 적용된 클래스들을 빈으로 등록해보자



    <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:aop="http://www.springframework.org/schema/aop"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">



    <bean id="boy" class="aop5.Boy"></bean>

    <bean id="girl" class="aop5.Girl"></bean>

    <bean id="myAspect" class="aop5.MyAspect"></bean>

    </beans>


















    <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">



    <bean id="boy" class="aop5.Boy"></bean>

    <bean id="girl" class="aop5.Girl"></bean>

    <bean id="myAspect" class="aop5.MyAspect"></bean>


    <aop:config>

    <aop:pointcut expression="execution (public void aop5.*.doSomething())"

    id="pt" />

    <aop:aspect ref="myAspect">

    <aop:before method="before" pointcut-ref="pt"/>

    <aop:after-returning method="after_returning" pointcut-ref="pt"/>

    <aop:after-throwing method="after_thirowing" pointcut-ref="pt"/>

    <aop:after method="after" pointcut-ref="pt"/>

    </aop:aspect>

    </aop:config>


    </beans>







    그리고 동작시키는 Test클래스를 작성하자





    위의 사진과 같이 FileSystemXmlApplicationContext로 하면 파일시스템 경로를 통해 xml파일을 찾는다.










    그리고 context.getBean( ID값, 인터페이스 클래스)을 사용해야 한다


    왜냐면 위빙이 일어날 때 컴파일시점이 아닌 런타임시점에서 코드가 조립되기 때문이다





    그렇기에 Boy.class로 하려면 아래그림처럼 해야한다

     







    오류가 나기때문에 아래그림처럼 pom.xml에 추가를 하면!










    잘된다.




    하지만 스프링의 기본정책은 런타임시점이기 때문에


    디폴트에 맞게 하자

    반응형
Designed by Tistory.