180 likes | 197 Views
Learn about Aspect-Oriented Programming in Spring framework, including concepts like Aspect, Jointpoint, Advice, Pointcut, and Weaving. Explore different types of Advice and how weaving works at compile time, class load time, and runtime.
E N D
Spring AOPAspect Oriented Programming By SrinivasReddy.S www.java9s.com
Cross Cutting Concerns class Bank{ private int balance; public void withdraw(int amount){ bankLogger.info(“Withdraw –”+amount); tx.begin(); balance = this.balance-amount; accountDao.saveBalance(balance); tx.commit(); } } www.java9s.com
Cross Cutting Concerns Application Modules Application Modules Application Modules Application Modules Application Modules www.java9s.com
Cross Cutting Concerns Logging Transaction Application Modules Application Modules Application Modules Spring Framework www.java9s.com
AOP – Definitions. • Aspect • Joinpoint • Advice • Pointcut • Introduction • Target Object • AOP Proxy • Weaving www.java9s.com
AOP – Definitions. Logger Advice Advisor Method Method Method Joinpoints Advisor Transaction Manager www.java9s.com
AOP - Definitions • Advice defines what needs to be applied and when. • Jointpoint is where the advice is applied. • Pointcut is the combination of different joinpoints where the advice needs to be applied. • Aspect is applying the Advice at the pointcuts. www.java9s.com
Advice Types • Before Advice • After returning Advice • Around Advice • Throws Advice Method Method Method Method Exception www.java9s.com
AOP - Weaving • Compile time • Class Load Time • Runtime – Springs way Caller Target Proxy www.java9s.com
Pointcut and Advisor POINTCUT CLASSES: • Perl5RegexpMethodPointcut • JdkRegexpMethodPointcut Pointcut and Advisor in one class: • RegexpMethodPointcutAdvisor www.java9s.com
Example public class CustomerImpl implements Customer{ public void browse(){ System.out.println("Browsing the internet"); } } class CafeOwner{ void LogInTime(){ System.out.println(“Log In time and name of the customer”); } void LogOutTime(){ System.out.println(“Log Out Time”); } void issueUsageBill(){ System.out.println(“Calculate and bill the customer”); } } www.java9s.com
Before Advice -MethodBeforeAdvice class InternetAdvisor implements MethodBeforeAdvice{ private CafeOwner cafeOwner; public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable { this.getCafeOwner().LogInTime(); } } www.java9s.com
Customer Proxy Caller Target object CustomerImpl proxyInterface Customer RegexpMethodPointcutAdvisor “*” – Apply to all methods CafeOwner InternetAdvice implements MethodBeforeAdvice
Configuration Step 1: Configure the Beans • <bean id ="customerImpl" class ="CustomerImpl"/> • <bean id = "cafeOwner" class ="CafeOwner"/> • <bean id ="internetAdvice" class ="InternetAdvice"> • <property name ="cafeOwner" ref ="cafeOwner"/> • </bean> www.java9s.com
Configuration Step 2: Configure the POINTCUT ADVISOR • <bean id ="cafeOwnerBeforeAndAfterAdvice" class ="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> <property name ="advice"> <ref local ="internetAdvice"/> </property> <property name ="pattern"> <value>.*</value> </property> </bean> www.java9s.com
Configuration Step 3: Configure the ProxyFactoryBean <bean id ="customerProxy" class ="org.springframework.aop.framework.ProxyFactoryBean"> <property name ="target"> <ref local ="customerImpl"/> </property> <property name ="proxyInterfaces"> <value>Customer</value> </property> <property name ="interceptorNames"> <list> <value>cafeOwnerBeforeAndAfterAdvice</value> </list> </property> </bean> www.java9s.com
Remember • Spring Does not support AOP for • Methods marked as final. • Fields www.java9s.com