π»
μ€νλ§ νλ μμν¬ - [Spring] AOP (2) / κ³΅ν΅ ν΄λμ€(Aspect), κ³΅ν΅ ν¨μ(Advice), ν΅μ¬μ½λ(JoinPoint) λ³Έλ¬Έ
KITRI/SPRING
μ€νλ§ νλ μμν¬ - [Spring] AOP (2) / κ³΅ν΅ ν΄λμ€(Aspect), κ³΅ν΅ ν¨μ(Advice), ν΅μ¬μ½λ(JoinPoint)
λν¨λ 2020. 7. 27. 10:19Advice λμμμ
λμμμ |
μ€λͺ |
Before |
λ©μλ μ€ν μ μ λμ |
After |
λ©μλ μ€ν νμ λμ |
After-returning |
λ©μλκ° μ μμ μΌλ‘ μ€νλ νμ λμ |
After-throwing |
μμΈκ° λ°μν νμ λμ |
Around |
λ©μλ νΈμΆ μ΄μ , μ΄ν, μμΈλ°μ λ± λͺ¨λ μμ μμ λμ |
μμ μ€μ΅
[interface] Person.java
package com.java.aop03;
public interface Person {
public void work();
}
Student.java
package com.java.aop03;
public class Student implements Person {
@Override
public void work() {
System.out.println("νμμ 곡λΆλ₯Ό ν©λλ€.");
}
}
Teacher.java
package com.java.aop03;
public class Teacher implements Person { //ν΅μ¬ν΄λμ€
@Override
public void work() { //ν΅μ¬ ν¨μ
System.out.println("μ μλμ κ°μλ₯Ό ν©λλ€.");
}
}
PAspect.java
package com.java.aop03;
import org.aspectj.lang.JoinPoint;
public class PAspect { // 곡ν΅ν΄λμ€(aspect)
public void open(JoinPoint joinPoint) { //곡ν΅ν¨μ(advice), ν΅μ¬μ½λ(JoinPoint)
System.out.println("μμ
μμ -> κ°μμ₯μ λ€μ΄μ¨λ€.");
}
public void close(JoinPoint joinPoint) {
System.out.println("μμ
λ -> κ°μμ₯μ λκ°λ€.");
}
}
appCTX.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"
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-3.1.xsd">
<!-- ν΅μ¬ν΄λμ€ -->
<bean id="teacher" class="com.java.aop03.Teacher"/>
<bean id="student" class="com.java.aop03.Student"/>
<!-- 곡ν΅ν΄λμ€ -->
<bean id="pAspect" class="com.java.aop03.PAspect"/>
<!-- AOP -->
<aop:config>
<aop:aspect id="aspect" ref="pAspect">
<aop:pointcut expression="within(com.java.aop03.*)" id="pMethod"/>
<aop:before method="open" pointcut-ref="pMethod"/>
<aop:after method="close" pointcut-ref="pMethod"/>
</aop:aspect>
</aop:config>
</beans>
MainClass.java
package com.java.aop03;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:com/java/aop03/appCTX.xml");
Person student = (Person) ctx.getBean("student");
student.work();
System.out.println();
Person teacher = (Person) ctx.getBean("teacher");
teacher.work();
System.out.println();
}
}

μλ¬ λ°μ μν€κΈ°
PAspect.java
package com.java.aop03;
import org.aspectj.lang.JoinPoint;
public class PAspect { // 곡ν΅ν΄λμ€(aspect)
//ν΅μ¬μ
public void open(JoinPoint joinPoint) { //곡ν΅ν¨μ(advice), ν΅μ¬μ½λ(JoinPoint)
System.out.println("μμ
μμ -> κ°μμ₯μ λ€μ΄μ¨λ€.");
}
//ν΅μ¬ν
public void close(JoinPoint joinPoint) {
System.out.println("μμ
λ -> κ°μμ₯μ λκ°λ€.");
}
//μλ¬
public void error(JoinPoint joinPoint) {
System.out.println("λ λ€μ΄ κ°μμμ μ«κ²¨λ¨..ν‘ μκΆλμμ!");
}
//μ μ
public void eat(JoinPoint joinPoint) {
System.out.println("μ μ¬μμ¬λ₯Ό λ§λκ² ν¨!!");
}
}
appCTX.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"
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-3.1.xsd">
<!-- ν΅μ¬ν΄λμ€ -->
<bean id="teacher" class="com.java.aop03.Teacher"/>
<bean id="student" class="com.java.aop03.Student"/>
<!-- 곡ν΅ν΄λμ€ -->
<bean id="pAspect" class="com.java.aop03.PAspect"/>
<!-- AOP -->
<aop:config>
<aop:aspect id="aspect" ref="pAspect">
<aop:pointcut expression="within(com.java.aop03.*)" id="pMethod"/>
<aop:before method="open" pointcut-ref="pMethod"/>
<aop:after method="close" pointcut-ref="pMethod"/>
<aop:after-returning method="eat" pointcut-ref="pMethod"/>
<aop:after-throwing method="error" pointcut-ref="pMethod"/>
</aop:aspect>
</aop:config>
</beans>
Student.java
package com.java.aop03;
import java.util.Scanner;
public class Student implements Person {
@Override
public void work() {
System.out.println("νμμ 곡λΆλ₯Ό ν©λλ€.");
Scanner sc = new Scanner(System.in);
System.out.println("μμ
λ ₯: ");
int su = sc.nextInt();
if(su==5) System.out.println(su/0);
sc.close();
}
}

+ λ€λ₯Έ λ°©λ²
PAspect.java
package com.java.aop04;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
public class PAspect { // 곡ν΅ν΄λμ€(aspect)
public void sub(ProceedingJoinPoint joinPoint) {
try {
//ν΅μ¬ν¨μμ
System.out.println("μμ
μμ -> κ°μμ₯μ λ€μ΄μ¨λ€.");
//ν΅μ¬μ½λ
joinPoint.proceed();
//μ μ
System.out.println("μ μ¬μμ¬λ₯Ό λ§λκ² ν¨!!");
} catch (Throwable e) {
//μλ¬
System.out.println("λ λ€μ΄ κ°μμμ μ«κ²¨λ¨..ν‘ μκΆλμμ!");
} finally {
//ν΅μ¬ν¨μ ν
System.out.println("μμ
λ -> κ°μμ₯μ λκ°λ€.");
}
}
}
appCTX.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"
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-3.1.xsd">
<!-- ν΅μ¬ν΄λμ€ -->
<bean id="teacher" class="com.java.aop04.Teacher"/>
<bean id="student" class="com.java.aop04.Student"/>
<!-- 곡ν΅ν΄λμ€ -->
<bean id="pAspect" class="com.java.aop04.PAspect"/>
<!-- AOP -->
<aop:config>
<aop:aspect id="aspect" ref="pAspect">
<aop:pointcut expression="within(com.java.aop04.*)" id="pMethod"/>
<aop:around method="sub" pointcut-ref="pMethod"/>
</aop:aspect>
</aop:config>
</beans>
MainClass.java
package com.java.aop04;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:com/java/aop04/appCTX.xml");
Person student = (Person) ctx.getBean("student");
student.work();
System.out.println();
Person teacher = (Person) ctx.getBean("teacher");
teacher.work();
System.out.println();
}
}

λ°μν
'KITRI > SPRING' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Comments