AOP : 반복해서 나오는 특정코드를 추출하여 클래스로 만들고 반복적으로 호출까지 해주는것 . 관점지향프로그래밍 

공통적으로 뽑아낸 코드 : advice

코드를 끼워 넣을 곳 : JoinPoint

조인포인트 모임 : PointCut


 끼워넣는 작업 : Weaving

advice +  PointCut = advisor



pom.xml


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>AOPXml</groupId>
  <artifactId>AOPXml</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.7.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.1</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
        </configuration>
      </plugin>
    </plugins>
  </build>
  
  <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.0.8.RELEASE</version>
    </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>5.0.8.RELEASE</version>
    </dependency>
      <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.8.13</version>
    </dependency>
        
  </dependencies>
  
  
  
</project>
 
cs


41행 : 의존성 추가 





cat.java   > model (dto) aop가 실행되기 위한 파일

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.aopex;
 
public class Cat {
    
    private String name;
    private int age;
    private String color;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    @Override
    public String toString() {
        return "Cat [name=" + name + ", age=" + age + ", color=" + color + "]";
    }
    
    public void catInfo() {
        System.out.println("이름:" + name);
        System.out.println("나이:" + age);
        System.out.println("컬러:" + color);
    }
    
    
 
}
cs







bean.xml  aop설정하기 위한 파일

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?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-4.3.xsd">
 
    <bean id="logAOP" class="com.aopex.LogAOP"/>
    <!-- LogAOP logAOP = new LogAOP(); -->
    
    <!-- AOP 설정 -->
    <aop:config>
        <aop:aspect id="logger" ref="logAOP">
            <aop:pointcut expression="within(com.aopex.*)" id="publicM"/>
        
            <aop:around method="loggerAop" pointcut-ref="publicM"/>
        </aop:aspect>    
    </aop:config>
    
    <bean id="myCat" class="com.aopex.Cat">
        <property name="name" value="야옹이"/>
        <property name="age" value="1"/>
        <property name="color" value="yellow"/>
    </bean>
 
</beans>
cs


9행 : <!-- LogAOP logAOP = new LogAOP(); -->


17 행 : loggerAop라는곳에 포인트컷((코드끼워넣을곳(조인포인트)들이 모인))  publicM적용

22 23 24 행 : name을 야옹이, age를 1 , color을 yellow으로 설정



LogAOP.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.aopex;
 
import org.aspectj.lang.ProceedingJoinPoint;
 
// 감시자 클래스
// aop가 실행될때 공통적으로 실행되는 부분을 설정하는곳
public class LogAOP {
    
    public Object loggerAop(ProceedingJoinPoint joinpoint)throws Throwable {
        
        // 공통기능이 적용되는 메소드가 어떤 메소드인지 ^출력^하기 위해 메소드명 취득
        String signatureStr = joinpoint.getSignature().toShortString();
        
 
        System.out.println(signatureStr + "시작");        
        //공통기능
        System.out.println("실행전:" + System.currentTimeMillis());
        
        try {
            Object obj = joinpoint.proceed();    // 핵심기능 실행시
            return obj;
        }finally {
            System.out.println("실행후:" + System.currentTimeMillis());            
            System.out.println(signatureStr + "종료");
        }
    }
 
}
cs



System.currentTimeMillis()  현재시간




mainClass.java


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.aopex;
 
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
 
public class mainClass {
 
    public static void main(String[] args) {
        
        AbstractApplicationContext ctx
            = new GenericXmlApplicationContext("classpath:bean.xml");
        
        Cat myC = ctx.getBean("myCat", Cat.class);
        
        myC.catInfo();        
        myC.catInfo();
        myC.catInfo();
        
        System.out.println(myC.getAge());
 
    }
 
}
cs


10 행 : xml 코드에서 생성된 코드를 java에서 사용하기 위해 









 



*실행값


LogAOP.java  Cats.toString() 시작

LogAOP.java  실행 전 :  현재시간

LogAOP.java  실행 후 :  현재시간

LogAOP.java  Cats.toString() 종료

     

LogAOP.java  Cats.toString() 시작

LogAOP.java  실행 전 :  현재시간

     

mainClass.java myC.catInfo(); - bean.xml    <bean id="myCat" class="com.aopex.Cat">    이름 : 야옹이

   나이 : 1

   색깔 :  yellow

LogAOP.java  실행 후 :  현재시간

LogAOP.java  Cats.toString() 종료



출력값 출처: https://blog.naver.com/rladltmf813/221232593668





'자바 과정 11회차 > spring mvc1 게시판' 카테고리의 다른 글

spring 이클립스 sts연동  (0) 2019.01.05
0920 AOP실습 Anno  (0) 2019.01.05
0920 AOP 설정  (0) 2019.01.04
0919 오후 수업 데이터 전송 ( ajax json map)  (0) 2019.01.04
0919 오전 수업 AjaxSample  (0) 2019.01.04

+ Recent posts