반응형
공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
이번 포스팅에서는 aop를 @Aspect 어노테이션으로 구현하는 방법에 대해 공부합니다.
aop의 경우 클래스에 설정하는게 xml에 설정하는 것보다 편할 수 있습니다.
xml 설정방법 보러가기▼
2018/01/05 - [Spring(스프링)] - 스프링(spring) AOP란? spring AOP 구현하기[1] : xml 스키마로 구현
1. pom.xml 파일에 의존설정부터 해주시고요.
1 2 3 4 5 | <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.7.4</version> </dependency> | cs |
2.공통 기능을 가지는 @Aspect 어노테이션을 가지는 클래스를 만듭니다.
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 52 53 | package org.mon.altong.aop2; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; @Aspect // Aspect 역할을 한다고 명시 public class PublicAop { //pointcut 어노테이션이 적용된 메소드가 하나 있어야함. //() 안에는 어느 범위까지 적용할 지 범주를 선언 // xml에서 선언했던 expression="" 과 같은 역할 // <aop:pointcut id="publicLogger" expression="within(org.mon.altong.aop.*)"/> @Pointcut("within(org.mon.altong.aop2.*)") private void pointcutMethod() {} //<aop:around pointcut-ref="publicLogger" method="aopLogger"/> //와 같음. @Around("pointcutMethod()") public Object aopLogger(ProceedingJoinPoint jointPoint) throws Throwable { String signatureStr = jointPoint.getSignature().toShortString(); System.out.println(signatureStr + " is start"); long st = System.currentTimeMillis(); try { Object object = jointPoint.proceed(); return object; } finally { long et = System.currentTimeMillis(); System.out.println(signatureStr + " is finished"); System.out.println(signatureStr + " 경과 시간 : " + (et-st)); } } // @Before 와 @After 는 @Pointcut 어노테이션 없이 사용. // 선언 시 핵심 기능이 실행되기 전에 실행됨. @Before("within(org.mon.altong.aop2.*)") public void beforeAdvice() { System.out.println("beforeAdvice()"); } @After ("within(org.mon.altong.aop2.*)") public void afterAdvice() { System.out.println("afterAdvice()"); } } | cs |
@Before와 @After의 경우 @Pointcut, @Around 를 사용하지 않아도
핵심 기능이 실행되기 전과 후에 호출됩니다.
타이핑 해보시고 예제 실행해보시면 이해되실 거에요.
3. 스프링 설정.xml 파일에 aop 클래스 선언
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?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"> <aop:aspectj-autoproxy /> <bean id="publicAop" class="org.mon.altong.aop2.PublicAop" /> <bean id="worker" class="org.mon.altong.aop2.Worker"> <property name="name" value="근육몬" /> <property name="age" value="27" /> <property name="job" value="Dev" /> </bean> </beans> | cs |
4. 핵심 기능을 가지는 클래스 만들기
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 | package org.mon.altong.aop2; public class Worker { private String name; private int age; private String job; 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 getJob() { return job; } public void setJob(String job) { this.job = job; } public void getWorkerInfo() { System.out.println(getName()); System.out.println(getAge()); System.out.println(getJob()); } } | cs |
5. 실행 클래스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package org.mon.altong.aop2; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.GenericXmlApplicationContext; public class Running { public static void main(String[] args) { String loc = "classpath:aop2Context.xml"; AbstractApplicationContext ctx = new GenericXmlApplicationContext(loc); Worker worker = ctx.getBean("worker", Worker.class); worker.getWorkerInfo(); ctx.close(); } } | cs |
이상입니다.
감사합니다.
반응형
'Spring(스프링), Spring Boot(스프링부트), JSP' 카테고리의 다른 글
스프링 클래스에서 src/main/resources 안의 db.properties 파일 불러오기 (0) | 2018.06.27 |
---|---|
스프링 @ContextConfiguration cannot be resolved a type 에러 해결방법! (1) | 2018.06.25 |
스프링(spring) AOP란? spring AOP 구현하기[1] : xml 스키마로 구현 (0) | 2018.01.05 |
스프링(Spring) 스프링 컨테이너, 스프링 빈 생명주기 (0) | 2018.01.04 |
스프링(Spring) DI설정방법[3] : DI java in XML and DI xml in JAVA (0) | 2018.01.02 |