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 |