본문 바로가기

SpringFramework

Spring Day4

핵심과 비핵심(부가적인내용)을 분리
주로 보안,트랜잭션,로깅에서 사용함
*핵심적인내용:target

핵심과 비핵심이 연결되는 접합점 - >Joinpoint


매번 사용되는것과 사용되지 않고 갖다쓰는 것을 분리시킴

<<<<<<AOP예제>>>>>>

--------------------------------------------------------------인터페이스--------------MsgBean.java

package Chapter1;

public interface MsgBean {

       void sayHello(String name);

       void sayHello2(String name);

       void sayHello3(String name);

       void sayHi(String name);

}

------------------------------------------------pointcut으로설정해줄부가적인---------MsgAdvice.java

package Chapter1;

import org.aspectj.lang.ProceedingJoinPoint;

public class MsgAdvice {

       public Object doing(ProceedingJoinPoint invocation)

       throws Throwable {

             // TODO Auto-generated method stub

             long start=System.currentTimeMillis();

             System.out.println("start시간...."+start);           

            

             Object  proc=invocation.proceed();  //이것을 기준으로 전처리 후처리

              long end=System.currentTimeMillis();

              System.out.println("end시간 : ....."+end);

              System.out.println("처리결과시간... "+(end-start));

         return proc;

       }

}

--------------------------aspect 설정하기위한 핵심----MsgBeanTarget.java

package Chapter1;

public class MsgBeanTarget implements MsgBean{

       @Override

       public void sayHello(String name) {

             try{

                    Thread.sleep(500);

             }catch(Exception e){

                    e.printStackTrace();

             }

             System.out.println("hello"+name);

       }

       @Override

       public void sayHello2(String name) {

             try{

                    Thread.sleep(500);

             }catch(Exception e){

                    e.printStackTrace();

             }

             System.out.println("sayHello2"+name);

       }

       @Override

       public void sayHello3(String name) {

             try{

                    Thread.sleep(500);

             }catch(Exception e){

                    e.printStackTrace();

             }

             System.out.println("sayHello3"+name);

       }

       @Override

       public void sayHi(String name) {

             try{

                    Thread.sleep(500);

             }catch(Exception e){

                    e.printStackTrace();

             }

             System.out.println("sayHi"+name);

       }

}

------------------------------------------------------msgMain.java

package Chapter1;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

//maven reposi에서 aspectj검색후 weaver추가

public class msgMain {

       public static void main(String[] args) {

             String[] path=new String[]{"app1.xml"};

             ApplicationContext ctx=new ClassPathXmlApplicationContext(path);

             MsgBean mtarget=ctx.getBean("msgBeanTarget",MsgBean.class);

             mtarget.sayHello("hong");

             mtarget.sayHello2("kim");

             mtarget.sayHello3("park");

       }

}

----------------------------------------------------어드바이스와 포인트콧이 ------------app.xml

<bean id="msgAdvice" class="Chapter1.MsgAdvice"/>

<bean id="msgBeanTarget" class="Chapter1.MsgBeanTarget"/>

 

<aop:config>                                                      <!-- advisor pointcut 연결되어있음 -->

<aop:aspect id="msgAspect" ref="msgAdvice">    <!-- aspect msgAdvice 연결 (Advice설정)-->

       <aop:pointcut expression="execution(public * Chapter1.MsgBeanTarget.*(*))"  

       id="msgpoint"/>   <!—매개변수1개에 타입에 성관없이, 메서드명에 상관없이 포인트컷으로 잡겟다(따라서 MsgBeanTarget클래스의 모든 메서드를 사용가능하도록 -->

       <aop:around method="doing" pointcut-ref="msgpoint"/> <!-- Before Advice After Advice msgpoint doing메서드를 msgbeanTarget 메서드를 실행할 때마다 Before, after 실행하도록  설정(advisor) -->

</aop:aspect>                                            

</aop:config>

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

Pointcut advice에 연결시켜줌

 

Spring_Day_4.zip


'SpringFramework' 카테고리의 다른 글

Spring websocket  (0) 2023.12.10
spring batch  (0) 2023.02.06
SpringFramework  (0) 2018.02.03
MVC,spring  (0) 2012.09.04
Spring01정리  (0) 2012.06.01