Skip to content
This repository was archived by the owner on Dec 13, 2020. It is now read-only.

Commit b598bca

Browse files
committed
Feat: AOP args
1 parent 2d28469 commit b598bca

File tree

8 files changed

+112
-2
lines changed

8 files changed

+112
-2
lines changed

src/main/java/com/springboot/aop/AopApplication.java

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.springboot.aop;
22

3+
import com.springboot.aop.aspect.Performance;
34
import com.springboot.aop.domain.Board;
45
import com.springboot.aop.domain.User;
56
import com.springboot.aop.repository.BoardRepository;

src/main/java/com/springboot/aop/Performance.java src/main/java/com/springboot/aop/aspect/Performance.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.springboot.aop;
1+
package com.springboot.aop.aspect;
22

33
import lombok.extern.slf4j.Slf4j;
44
import org.aspectj.lang.ProceedingJoinPoint;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.springboot.aop.aspect;
2+
3+
import com.springboot.aop.domain.History;
4+
import com.springboot.aop.domain.User;
5+
import com.springboot.aop.repository.HistoryRepository;
6+
import org.aspectj.lang.annotation.AfterReturning;
7+
import org.aspectj.lang.annotation.Aspect;
8+
import org.aspectj.lang.annotation.Pointcut;
9+
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.stereotype.Component;
11+
12+
@Aspect
13+
@Component
14+
public class UserHistory {
15+
16+
@Autowired
17+
private HistoryRepository historyRepository;
18+
19+
/**
20+
* args(user) 표현식을 통해 타겟 메소드의 인자와 어드바이스의 인자가 매칭된다.
21+
* updateUser 라는 포인트컷이 user 라는 인자를 사용하도록 args(user) 표현식으로 지정한 것이다.
22+
*
23+
* @param user
24+
*/
25+
@Pointcut("execution(* com.springboot.aop.service.UserService.update(*)) && args(user)")
26+
public void updateUser(User user) {}
27+
28+
/**
29+
* '@AfterReturning' 을 통해 정상적으로 타겟 메소드가 실행 된 후, DB 에 저장되도록 함
30+
* @param user
31+
*/
32+
@AfterReturning("updateUser(user)")
33+
public void saveHistory(User user) {
34+
historyRepository.save(new History(user.getIdx()));
35+
}
36+
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.springboot.aop.domain;
2+
3+
import lombok.Getter;
4+
import lombok.Setter;
5+
6+
import javax.persistence.Column;
7+
import javax.persistence.Entity;
8+
import javax.persistence.GeneratedValue;
9+
import javax.persistence.Id;
10+
import java.util.Date;
11+
12+
@Getter
13+
@Setter
14+
@Entity
15+
public class History {
16+
17+
@Id
18+
@GeneratedValue
19+
private long idx;
20+
21+
@Column
22+
private long userIdx;
23+
24+
@Column
25+
private Date updateDate;
26+
27+
public History() {}
28+
29+
public History(long userIdx) {
30+
this.userIdx = userIdx;
31+
}
32+
33+
public History(long userIdx, Date updateDate) {
34+
this.userIdx = userIdx;
35+
this.updateDate = updateDate;
36+
}
37+
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.springboot.aop.repository;
2+
3+
import com.springboot.aop.domain.History;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface HistoryRepository extends JpaRepository<History, Long> {
7+
}

src/main/java/com/springboot/aop/service/UserService.java

+2
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,6 @@ public interface UserService {
88

99
List<User> getUsers();
1010

11+
void update(User user) throws Exception;
12+
1113
}

src/main/java/com/springboot/aop/service/impl/UserServiceImpl.java

+5
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,9 @@ public List<User> getUsers() {
1919
return users;
2020
}
2121

22+
@Override
23+
public void update(User user) throws Exception {
24+
userRepository.save(user);
25+
}
26+
2227
}

src/test/java/com/springboot/aop/aop/BoardServiceTest.java src/test/java/com/springboot/aop/aop/ServiceTest.java

+21-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.springboot.aop.aop;
22

3+
import com.springboot.aop.domain.History;
4+
import com.springboot.aop.domain.User;
5+
import com.springboot.aop.repository.HistoryRepository;
36
import com.springboot.aop.service.BoardService;
47
import com.springboot.aop.service.UserService;
58
import org.junit.Assert;
@@ -9,14 +12,18 @@
912
import org.springframework.boot.test.context.SpringBootTest;
1013
import org.springframework.test.context.junit4.SpringRunner;
1114

15+
import java.util.List;
16+
1217
@RunWith(SpringRunner.class)
1318
@SpringBootTest
14-
public class BoardServiceTest {
19+
public class ServiceTest {
1520

1621
@Autowired
1722
private BoardService boardService;
1823
@Autowired
1924
private UserService userService;
25+
@Autowired
26+
private HistoryRepository historyRepository;
2027

2128
@Test
2229
public void findBoards() throws Exception {
@@ -28,4 +35,17 @@ public void findUsers() throws Exception {
2835
Assert.assertEquals(userService.getUsers().size(), 100);
2936
}
3037

38+
@Test
39+
public void updateUsers() throws Exception {
40+
List<User> users = userService.getUsers();
41+
for (int i = 0; i < 5; ++i) {
42+
User user = users.get(i);
43+
user.setEmail("[email protected]");
44+
userService.update(user);
45+
}
46+
47+
List<History> histories = historyRepository.findAll();
48+
Assert.assertEquals(histories.size(), 5);
49+
}
50+
3151
}

0 commit comments

Comments
 (0)