사용자 도구

사이트 도구


spring:home

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
spring:home [2018/09/02 13:55] – [AOP(Aspect Oriented Promming : 관점지향프로그래밍)] taekguspring:home [2025/04/15 10:05] (현재) – 바깥 편집 127.0.0.1
줄 5: 줄 5:
     * [[spring:mvcproject|Spring MVC Project]]     * [[spring:mvcproject|Spring MVC Project]]
  
 +  - [[https://www.codeproject.com/Articles/1263860/WebControls/|Spring Boot]]
 +  - [[https://start.spring.io|Spring Boot app을 쉽게 생성하는 "Spring 초기화 해주는 자":https://start.spring.io]]
 +  - [[https://goddaehee.tistory.com/204|Spring에서 jsp view사용]]
 ==== DI(Dependency Injection)와 IOC컨테이너 ==== ==== DI(Dependency Injection)와 IOC컨테이너 ====
  
줄 188: 줄 191:
 AOP 기법이 바로 이러한 것입니다. 공통 기능을 핵심 기능과 분리해 놓고, 공통 기능 중에서 핵심 기능에 적용하고자 하는 부분에 적용하는 것입니다. AOP 기법이 바로 이러한 것입니다. 공통 기능을 핵심 기능과 분리해 놓고, 공통 기능 중에서 핵심 기능에 적용하고자 하는 부분에 적용하는 것입니다.
  
 +=== AOP란? ===
 +Spring에서 AOP구현 방법 : proxy를 이용합니다.
 +스프링에서 AOP구현 방식
 +  * XML스키마기반의 AOP구현
 +  * @Aspect어노테이션기반의 AOP구현
 +용어정리
 +  * Aspect : 공통 기능
 +  * Advice : Aspect의 기능 자체
 +  * Jointpoint : Advice를 적용해야 되는 부분( ex, 필드, 메소드 ) (스프링에서는 메소드만 해당)
 +  * Pointcut : Jointpoint의 부분으로 실제로 Advice가 적용된 부분
 +  * Weaving : Advice를 핵심 기능에 적용 하는 행위
 +<code xml>
 +<?xml version="1.0" encoding="UTF-8"?>
 +<beans xmlns="http://www.springframework.org/schema/beans"
 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" profile="dev"
 + 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.xsd">
 + <!-- Root Context: defines shared resources visible to all other web components -->
 + <bean id="logAop" class="com.taekgu.ex.LogAop" />
 + <aop:config>
 + <aop:aspect id="logger" ref="logAop">
 + <aop:pointcut id="publicMethod"
 + expression="within(com.taekgu.ex.*)" />
 + <aop:around pointcut-ref="publicMethod" method="loggerAop" />
 + </aop:aspect>
 + </aop:config>
 + <bean id="serverInfo" class="com.taekgu.ex.ServerInfo">
 + <property name="serverAddress" value="localhost"></property>
 + <property name="serverPort" value="8080"></property>
 + </bean>
 +
 +</beans>
 +</code>
 +
 +<code java>
 +package com.taekgu.ex;
 +
 +import org.aspectj.lang.ProceedingJoinPoint;
 +
 +public class LogAop {
 + public Object loggerAop(ProceedingJoinPoint joinpoint) throws Throwable {
 + String signatureStr = joinpoint.getSignature().toShortString();
 + System.out.println(signatureStr + "is start.");
 + long st = System.currentTimeMillis();
 + try {
 + Object obj = joinpoint.proceed();
 + return obj;
 + } finally {
 + long et = System.currentTimeMillis();
 + System.out.println(signatureStr + " is finished.");
 + System.out.println(signatureStr + " 경과시간 " + (et - st));
 + }
 +   }
 +}
 +</code>
spring/home.1535896500.txt.gz · 마지막으로 수정됨: 2025/04/15 10:05 (바깥 편집)