πToday I Learned
Spring
Spring AOP, Aspect Oriented Programming
- κ΄μ μ§ν₯ νλ‘κ·Έλλ°
- κ΄μ (=κ΄μ¬μ¬) > μ
무 ꡬν μ μ£Όμ
λ¬΄κ° μλ λλ¨Έμ§ λ³΄μ‘° μ
무
- μ£Όμ
무 vs 보쑰μ
무
[κ²μν κΈμ°κΈ°]
- κΈ°μ‘΄ λ°©μ
- add.do
a. κΈμ°κΈ° > μ£Όμ
무
b. κΆν μ²΄ν¬ > 보쑰μ
무
- μ£Όμ
무μ 보쑰μ
무λ₯Ό κ°μ κ³³μμ ꡬν(ν νμΌμμ ꡬν)
- λ¨μ > μ½λ κ΄λ¦¬ λΆνΈ(μ΄λ~μ΄λ? μ£Όμ
무? 보쑰μ
무?)
- AOP λ°©μ
- add.do
- μ£Όμ
무μ 보쑰μ
무λ₯Ό λΆλ¦¬μμΌμ λ°λ‘ ꡬν(물리μ μΌλ‘ λΆλ¦¬)
- μ€νλ§μ ν΅ν΄μ μ£Όμ
무μ 보쑰μ
무λ₯Ό λ€μ κ²°ν© ν λμ
Spring AOP μ©μ΄
- Core Concern
- λΉμ¦λμ€ μ½λ, μ£Όμ
무
- Cross-cutting Concern
- 보쑰μ
무(μ£Όμ
무 λμ€μ λΌμ΄μ λ€μ΄μ€λ μ
무)
- Target
- λΉμ¦λμ€ μ
무λ₯Ό μμ ν κ°μ²΄
- Proxy
- Targetμ κ°μ¬λ λ리 κ°μ²΄
- JoinPoint
- Targetμ΄ κ°μ§ μ£Όμ
무(λ©μλ)
- Pointcut
- 보쑰μ
무μ νΉμ JoinPointλ₯Ό μ°κ²°νλ μμ
- Aspect
- 보쑰μ
무λ₯Ό ꡬννλ κ°μ²΄
- Advice
- μ£Όμ
λ¬΄κ° μνλλ μ΄λ μμ μ 보쑰μ
무λ₯Ό μ€νν μ§?
a. Before Advice (μ€μ)
b. After Advice (μ€μ)
c. Around Advice
d. After-returning Advice
e. After-throwing Advice
Spring AOP ꡬν
- "com.test.spring.aop1" ν¨ν€μ§
> "Main.java" //λ©μΈ
> "Memo.java"(I) //λ©μΈ μ
무 κ°μ²΄(μΈν°νμ΄μ€)
> "MemoImpl.java"(C) //λ©μΈ μ
무 κ°μ²΄(ν΄λμ€)
> "Logger.java"(C) //보쑰 μ
무 κ°μ²΄(ν΄λμ€)
> "memo.xml" //μ€νλ§ μ€μ νμΌ
κ³μΈ΅ <-> κ³μΈ΅
Controller <-> DAO
IBoardDAO dao = new BoardDAO(); -> κ³ μ©νλ κ»λ°κΈ°λ μΈν°νμ΄μ€λ‘ λ§λ λ€. μΈμ€ν΄μ€ν νμ§ λ§κ³ μΈν°νμ΄μ€λ₯Ό ꡬννμ.
dao.add(dto)
Controller <-> View
μ νλ‘μ νΈ λ§λ€κΈ°
- New > Spring Legacy Project > Spring MVC Project > "WebTest" > "com.test.spring" > Finish
Spring MVC Project
- μ€νλ§ κΈ°λ° MVC μΉ νλ‘μ νΈ κ΅¬ν
ν¨ν€μ§
- "com.test.spring.controller" > μμ² λ΄λΉ
Servlet/JSP
- μΉ μμ² μ²λ¦¬ + ν΅μ > Controller μν
μ€νλ§ MVC
DispatcherServlet(λ©΄μ μ§λ¬Έ)
Front-Controller(λ©΄μ μ§λ¬Έ)
μμ‘΄ μ£Όμ
μΆκ°
- com.test.spring.controller > "Ex02Controller.java"
- "com.test.spring.persistence" > "SpringDAO.java"(I)
> "SpringDAOImpl.java(C)
- views > "ex02.jsp"
xml μμ μ λ°λμ μλ²λ₯Ό κ»λ€κ° μΌμΌ λ°μλλ€.