1 / 19

AOP

AOP. ㅇ AOP (Aspect Oriented Programming) - 기능을 핵심 비즈니스와 공통 모듈로 구분하고 , 핵심 로직에 영향을 미치지 않고 사이사이에 공통 모듈을 잘 끼워넣도록 개발하는 방법 - 공통 모듈을 만든 후에 코드 밖에서 비즈니스 로직에 삽입하는 방법 ㅇ 사용 예 ) - 메소드 성능 검사 - 트랜잭션 처리 - 예외 반환 - 아키텍처 검증 - 로깅 , 인증 , 권한 등. AOP.

Download Presentation

AOP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. AOP ㅇAOP (Aspect Oriented Programming) - 기능을 핵심 비즈니스와 공통 모듈로 구분하고, 핵심 로직에 영향을 미치지 않고사이사이에 공통 모듈을 잘 끼워넣도록 개발하는 방법 - 공통 모듈을 만든 후에 코드 밖에서 비즈니스 로직에 삽입하는 방법 ㅇ 사용 예) - 메소드 성능 검사 - 트랜잭션 처리 - 예외 반환 - 아키텍처 검증 - 로깅, 인증, 권한 등

  2. AOP ㅇ 컴파일, 클래스 로딩, 런타임 세가지 AOP 적용 방식이 존재 - 스프링은 런타임 시에 AOP를 적용하는 Proxy 기반의 AOP 만을 지원 (핵심 로직을 실행하는 전/후 공통기능을 삽입) - 스프링의 방식만으로도 엔터프라이즈 어플리케이션을 구현하는데 전혀 부족함이 없음 핵심로직 핵심로직 핵심로직 공통모듈

  3. AOP ㅇ AOP 용어

  4. AOP ㅇ 필요 라이브러리 추가 - aopalliance.jar - aspectjweaver.jar - aspectjrt.jar - com.springsource.net.sf.cglib.jar

  5. AOP - xml config.xml • <?xml version="1.0" encoding="UTF-8"?> • <beans xmlns="http://www.springframework.org/schema/beans" • xmlns:aop="http://www.springframework.org/schema/aop" • xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" • 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.xsd"> • <bean id="first" class="edu.seowon.aop.xml.First" /> • <bean id="xmlAspect" class="edu.seowon.aop.xml.XmlAspect" /> • <aop:config> • <aop:aspect ref="xmlAspect"> • <aop:beforepointcut="execution(* edu.seowon.aop.xml.First.process(..))“ • method="before" /> • <aop:afterpointcut="execution(* edu.seowon.aop.xml.First.process(..))" • method="after" /> • <aop:after-throwingpointcut="execution(* edu.seowon.aop.xml.First.process(..))" • method="afterThrowing" /> • </aop:aspect> • </aop:config> • </beans>

  6. AOP - xml Main.java public class Main { public static void main(String[] args) { ClassPathXmlApplicationContextctx = new ClassPathXmlApplicationContext( "edu/seowon/aop/xml/config.xml"); Object obj = ctx.getBean("first"); ((First)obj).process(); } }

  7. AOP - xml First.java public class First { public void process() { System.out.println("First process()"); throw new RuntimeException(); } }

  8. AOP - xml XmlAspect.java public class XmlAspect { public void before() { System.out.println("before"); } public void after() { System.out.println("after"); } public void afterThrowing() { System.out.println("afterThrowing"); } }

  9. AOP - Annotation config.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <context:annotation-config /> <aop:aspectj-autoproxy /> <bean id="first" class="edu.seowon.aop.anno.First" /> <bean id="annoAspect" class="edu.seowon.aop.anno.AnnoAspect" /> </beans>

  10. AOP - Annotation Main.java public class Main { public static void main(String[] args) { ClassPathXmlApplicationContextctx = new ClassPathXmlApplicationContext( "edu/seowon/aop/anno/config.xml"); Object obj = ctx.getBean("first"); ((First)obj).process(); } }

  11. AOP - Annotation First.java public class First { public void process() { System.out.println("First process()"); throw new RuntimeException(); } }

  12. AOP - Annotation AnnoAspect.java @Aspect public class AnnoAspect { @Pointcut("execution(* edu.seowon.aop.anno..*(..))") public void process() {} @Before("process()") public void before() { System.out.println("before"); } @After("process()") public void after() { System.out.println("after"); } @AfterThrowing("process()") public void afterThrowing() { System.out.println("afterThrowing"); } }

  13. AOP - Around config.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <context:annotation-config /> <aop:aspectj-autoproxy /> <bean id="first" class="edu.seowon.aop.around.First" /> <bean id="annoAspectAround" class="edu.seowon.aop.around.AnnoAspectAround" /> </beans>

  14. AOP - Around Main.java public class Main { public static void main(String[] args) { ClassPathXmlApplicationContextctx = new ClassPathXmlApplicationContext( "edu/seowon/aop/around/config.xml"); Object obj = ctx.getBean("first"); ((First)obj).process(); } }

  15. AOP - Around First.java public class First { public void process() { System.out.println("First process()"); } }

  16. AOP - Around AnnoAspectAround.java @Aspect public class AnnoAspectAround { @Pointcut("execution(* edu.seowon.aop.around..*(..))") public void process() {} @Around("process()") public Object trace(ProceedingJoinPointjoinPoint) throws Throwable { Object obj = null; try { System.out.println("around before"); obj = joinPoint.proceed(); System.out.println("around after"); } catch(Throwable e) { e.printStackTrace(); } return obj; } }

  17. AOP ㅇ Pointcut 표현식 - execution() : 적용할 메소드를 세부적으로 명시 execution(public void set*(..))  리턴 타입 :void , 메소드명 : set으로 시작, 파라미터 : 0개 이상 execution(* com.spring.aop.*.*())  리턴 타입 : All, 메소드명 : All, 파라미터 : 없음 execution(* com.spring.aop..First.process(..))  리턴 타입 : All, 메소드명 : process, 파라미터 : 0개 이상 execution(String com.spring.aop.exam.First.process())  리턴 타입 : String, 메소드명 :process, 파라미터 : 없음 execution(* get*(*))  리턴 타입 : All, 메소드명 : get으로 시작, 파라미터 : 1개(All) execution(* get*(*, *))  리턴 타입 : All, 메소드명 : get으로 시작, 파라미터 : 2개(All) execution(* read*(String, ..))  리턴 타입 : All, 메소드명 : read로 시작, 파라미터 : 첫번째 String, 나머지 모든 타입 0개 이상

  18. AOP ㅇ Pointcut 표현식 - within() : 특정 패키지 또는 클래스의 모든 메소드 within(com.spring.aop.exam.First.process) within(com.spring.aop.exam.First.*) within(com.spring.aop.exam..*) - bean() bean(first)  빈의 이름이 first 인 클래스의 메소드 bean(*rst)  빈의 이름이 rst 로 끝나는 빈의 메소드

  19. AOP 실습 ㅇ 패키지 : exam.spring.aop ㅇSpringExam (KakaoTalk, Tmap) 활용 runKakaoTalk, runTmap메소드 실행 시 AOP를적용하여 로그 출력 ex) 메소드 실행 전 before AOP! 메소드 실행 후 after AOP!

More Related