Advice 의 종류와 사용법 !!

 

1. @Around

가장 널리 사용되는 advice로, 대상 객체의 메서드를 실행 전, 후 또는 익셉션 발생 시점에서 원하는 기능을 삽입할 수 있다.

@Around("execution(public * springframework.com..impl.*Impl.selectArticleDetail*(..))")

 

2. @After

대상 객체의 메서드를 실행하는 도중 익셉션 발생 여부와 상관없이 메서드 실행 후 기능을 실행한다.

@After("execution(public * springframework.com..impl.*Impl.selectArticleDetail*(..))")

 

3. @AfterReturning

대상 객체의 메서드가 익셉션없이 실행된 이후 기능을 실행한다.

@AfterReturning(pointcut = "execution(public * springframework.com..impl.*Impl.selectArticleDetail*(..))", returning = "obj")

 

4. @AfterThrowing

익셉션이 발생한 경우에 기능을 실행한다.

@AfterThrowing(pointcut = "execution(public * springframework.com..impl.*Impl.selectArticleDetail*(..))", throwing = "exception")

 

5. @Before

객체의 메서드 호출 전에 기능을 실행한다.

@Before("execution(public * springframework.com..impl.*Impl.selectArticleDetail*(..))")

 

각 패턴은 '*'을 이용하여 모든 값을 표현할 수 있고 , '..'는 0개 이상이라는 뜻ㅇㅣ다 !!

 

그리고 검색하다보면 ProceedingJointPoint 메서드를 볼 수 있다.

이 메서드는 파라미터로 부터 전달받은 값(?)이며 사용법은

Object result = jointPoint.proceed();

로 매서드를 호출한다.

 

그리고 해당 객체에 대한 정보, 실행되는 메서드에 대한 정보. 메서드를 호출할 때 전달된 인자에 대한 정보는 ProceedingJointPoint 인터페이스에서 메서드를 제공해준다 !

Object getTarget(); // 대상 객체를 구한다.
Signature getSignature(); // 호출되는 메서드에 대한 정보를 구한다.
Object[] getArgs(); // 파라미터 목록을 구한다.

 

 

참고 서적 : 초보 웹 개발자를 위한 스프링 4 프로그래밍 입문

https://www.latera.kr/blog/2019-07-02-effective-optional/

 

Optional 제대로 활용하기 - Increment

Optional을 올바르게 사용하기 위해 공부한 내용을 정리합니다. 개요 getter에 Optional을 사용하는 것이 좋은지에 대해, Java 언어 아키텍트인 Brian Goetz가 Stackoverflow에 작성한 답변(링크)입니다. 당연히

www.latera.kr

정리 너무 잘해주셔서...

계속 이분 것만 찾게된다 ..

퍼가요 ~

'java > java' 카테고리의 다른 글

[Java] StringBuilder 사용법  (0) 2022.03.07

String 객체를 사용해서 문자열 + 문자열 을 하려면

String answer = "";

String str1 = "Hello ";
String str2 = "World";
String str3 = "!!";

answer += str1;
answer += str2;
answer += str3;

System.out.println(answer);

 

이렇게 작성하면 anwer 의 값은

"Hello World!!"

라고 나온다.

즉, 새로운 객체 answer를 만들어 객체(str1, str2, str3)를 대입한다.

이로써 객체를 더 많이 생성해야 원하는 값을 만들 수 있다.

 

그리고 StringBuilder은 문자열을 다루는 메소드.. 라고 할 수 있다.

객체 한번 만든 뒤, 계속 그 객체를 이용해서 원하는 값을 만들 수 있다.

StringBuilder sb = new StringBuilder();
String answer = "";
String str1 = "Hello ";
String str2 = "World ";
String str3 = "!!";
answer = sb.append(str1).append(str2).append(str3).toString();
System.out.println(answer);

 

StringBuilder을 지원하는 메소드들은 append외에도 아래에 접속하면 확인할 수 있다.

https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html

 

StringBuilder (Java Platform SE 7 )

Inserts the string into this character sequence. The characters of the String argument are inserted, in order, into this sequence at the indicated offset, moving up any characters originally above that position and increasing the length of this sequence by

docs.oracle.com

 

'java > java' 카테고리의 다른 글

[JAVA] Optional  (0) 2022.03.22

spring 디자인 패턴이라고 하면 맨 처음으로 떠오르는 것이 아마 aop가 아닐까.. ㅎㅎㅎ

 

프록시 : 핵심 기능의 실행은 다른 객체에 위임하고 부가적인 기능을 제공하는 객체 !

AOP : 공통 기능 구현과 핵심 기능 구현을 분리하는 것 ..

(여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용을 높혀줌!)

 

스프링 AOP는 프록시 객체를 자동으로 만들어주니까 공통 기능을 구현한 클래스만 맞춰 구현해주면 된다 !

XML 을 이용한  AOP와 어노테이션을 이용한 AOP사용 방법이 있다. 

 

어노테이션이 편하니까 .. 어노테이션을 이용한 AOP 사용 방법 !.!

아, 나는 spring boot + gradle 사용중이다 .. 

(spring + maven 을 이용해서 진행한 적도 있어서 그것도 기록해놔야겠다 !.!)

 

1. 우선 build.gradle의 dependencies에 아래 코드를 입력해준다

implementation 'org.springframework.boot:spring-boot-starter-aop'

 

2. @Aspect 어노테이션 이용

@Aspect 어노테이션은 공통 기능을 제공하는 클래스를 적용할 수 있다.

아래와 같이 코드를 작성해보았다.

@Component 는 @SpringbootApplication 이 처음 실행 될 때 컨테이너를 만들어 실행되기 위해 작성한 것이니, 상황에 따라 생략해도 된다 !

 

우선,,

@Pointcut은 실제 Advice가 적용되는 기점을 말한다.

'*'은 모든 값을 표현할 수 있고, '..'은 0개 이상이라는 의미이다.

그리고 아래 코드와 같이 'public' 수식어를 작성해도 되지만, 어차피 스프링 AOP의 경우, public에서만 적용 가능하기 떄문에 생략해주어도 괜찮다 !!

@Around("execution(public * hello.hellospring..*(..))")

 

아, 그리고 pointcut을 하고 싶은 위치가 한군데 이상이면

@Around("execution(* hello.hellospring..*(..)) || execution(* hello.hellospring..*(..))")

이런 식으로 중간에 연산자를 넣어서 사용할 수 있다.

 

다음번에는 @Around외의 다른 Advice에 대해 기록을 할 예정이다. 

처음 spring boot를 설치하고 난 뒤에 jdbc를 설정해주지 않으면 서버가 잘 올라가지 않는다.

 

아래와 같은 Failed화면이 뜬다.

 

이는 jdbc 드라이버를 설정해주지 않아서 그런 듯 하다 ...

그러면 jdbc를 설정해주면 되는데, 우선 오라클로 개발을 진행할 예정이라 오라클 드라이버로 설정해주었다.

application.properties에 jdbc 정보를 아래와 같이 입력해주면 된다. (나는 오라클 기준이다 !)

spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521/test
spring.datasource.username=유저이름
spring.datasource.password=비밀번호

 

 

아직 db가 준비되지 않았다면, @EnableAutoConfiguration 어노테이션을 사용하는 방법도 있다.

@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})

의외로 spring project를 만들기 힘들어하는 사람들이 꽤 있길래 ..

한번 끄적여봤다 ..

 

1. 이클립스의 File > Other을 선택한다.

그 후, Spring Strarter Project를 선택하여 

2. 이후, Name 에는 본인이 만들 Project의 이름을 작성한다.

그런 뒤 Type이 있는데 그곳에는 사용할 빌드 도구 Maven과 Gradle Project를 선택해준다.

더보기

Maven Project : 

Gradle Project : 

packaging 은 Jar, War로 나누어지는데 이는 간단하게 이야기하면 자바 프로젝트를 압축한 파일의 확장자라고 생각하면 된다.

더보기

Jar (Java Archive) : JAVA 애플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일이다.

War (Web Application Archive) : 웹 응용 프로그램을 위한 포맷이라 웹 관련 자원만 포함하고 있으며 이를 사용하면 웹 애플리케이션을 쉽게 배포하고 테스트할 수 있다.

Java Version은 본인이 설치한 jdk의 버전을 선택해주면 된다.

Language는 사용할 언어 .. 

모두 기록한 뒤, Next 버튼을 클릭해준다.

아래의 부분은 Spring Project Dependencies인데, 이는 의존성 라이브러리 정보이며 나중에 pom.xml에 <dependencies></dependencies> 에 아래에서 선택한 부분이 등록되어 있다.

이후 Finish버튼을 클릭하여 Project를 생성한다.

프로젝트 생성 시, 의존성 라이브러리에 의해 조금 오래 걸릴 수도 있다!

3. 이후, 아래와 같이 spring boot의 서버를 가동해준다.

그리고 아래와 같이 failed 라는 문구가 없으면 성공 !!

4. 끝 !!!!!!

jdk, 이클립스를 설치했으니 이제 sts 설치를 해야지 !..

 

우선, 스프링이랑 스프링 부트의 차이점은

스프링 개발환경을 셋팅하려면 조금 복잡하다. 이를 편하게 하기 위해서 셋팅이 되어진게 스프링 부트다..

더보기

spring frame work : 

 

spring boot : 

 

사실 지금 기록하는 이유도 스프링 셋팅하다가 실패해서 다음을 기약하기 위함이다.

우선 스프링 부트를 설치한 뒤에 다음에 한번 다시.. 시도해봐야겠다 ㅠㅠ

 

1. 이클립스 상단의 Help > Eclipse Marketplace를 선택한다.

이클립스는 plugin을 통해 기능을 확장할 수 있는데, plugin은 Eclipse Marketplace에서 바로 설치하는 방법과 다운로드한 후 수동으로 설치하는 방법이 있다.

2. Eclipse Marketplace에 'sts'를 검색한다.

그 후, 아래의 spring tool 4 버전을 설치해준다 !

설치가 끝난 후, 재시작을 권유하는 안내 팝업창이 활성화되면 재시작하여 sts를 적용한다.

 

3. 설치는 끝 !!

+ Recent posts