SlideShare a Scribd company logo
Spring Framework - AOP




                SPRING FRAMEWORK 3.0
Dmitry Noskov   Aspect Oriented Programming with Spring
Aspect Oriented Programming




          Spring Framework - AOP   Dmitry Noskov
What is AOP?
   is a programming paradigm
   extends OOP
   enables modularization of crosscutting concerns
   is second heart of Spring Framework




                        Spring Framework - AOP   Dmitry Noskov
A simple service method



public Order getOrder(BigDecimal orderId) {
    return (Order) factory.openSession()
                         .get(Order.class, orderId);
}




                            Spring Framework - AOP   Dmitry Noskov
Add permissions check


public Order getOrder(BigDecimal orderId) {
    if (hasOrderPermission(orderId)) {
        return (Order) factory.openSession()
                             .get(Order.class, orderId);
    } else {
        throw new SecurityException("Access Denied");
    }
}




                            Spring Framework - AOP   Dmitry Noskov
Add transaction management
public Order getOrder(BigDecimal orderId) {
    if (hasOrderPermission(orderId)) {
        Order order;
        Session session = factory.openSession();
        Transaction tx = session.beginTransaction();

        try {
            order = (Order) session.get(Order.class, orderId);
            tx.commit();
        } catch (RuntimeException e) {if (tx!=null) {tx.rollback();}
        } finally {session.close();}

        return order;
    } else { throw new SecurityException("Access Denied");}
}



                                Spring Framework - AOP   Dmitry Noskov
Add cache
public Order getOrder(BigDecimal orderId) {
    if (hasOrderPermission(orderId)) {
        Order order = (Order)cache.get(orderId);
        if (order==null) {
            Session session = factory.openSession();
            Transaction tx = session.beginTransaction();


            try {
                order = (Order) session.get(Order.class, orderId);
                tx.commit();
                cache.put(orderId, order);
            } catch (RuntimeException e) {if (tx!=null) {tx.rollback();}
            } finally {session.close();}
        }


        return order;
    } else { throw new SecurityException("Access Denied");}
}


                                       Spring Framework - AOP   Dmitry Noskov
A similar problem at enterprise level




                 Spring Framework - AOP   Dmitry Noskov
What does AOP solve?

Logging

Validation

Caching

Security

Transactions

Monitoring

Error Handling

Etc…


                 Spring Framework - AOP   Dmitry Noskov
AOP concepts
   aspect
   advice
   pointcut
   join point




                 Spring Framework - AOP   Dmitry Noskov
AOP and OOP

AOP                                            OOP

1.   Aspect – code unit that                   1.   Class – code unit that
     encapsulates pointcuts, advice,                encapsulates methods and
     and attributes                                 attributes
2.   Pointcut – define the set of              2.   Method signature – define the
     entry points (triggers) in which               entry points for the execution of
     advice is executed                             method bodies
3.   Advice – implementation of                3.   Method bodies –implementation
     cross cutting concern                          of the business logic concerns
4.   Weaver – construct code                   4.   Compiler – convert source code
     (source or object) with advice                 to object code

                                      Spring Framework - AOP   Dmitry Noskov
AOP concepts(2)
   introduction
   target object
   AOP proxy
   weaving
     compile time
     load time

     runtime




                     Spring Framework - AOP   Dmitry Noskov
Spring AOP
   implemented in pure java
   no need for a special compilation process
   supports only method execution join points
   only runtime weaving is available
   AOP proxy
       JDK dynamic proxy
       CGLIB proxy
   configuration
       @AspectJ annotation-style
       Spring XML configuration-style

                              Spring Framework - AOP   Dmitry Noskov
@AspectJ




           Spring Framework - AOP   Dmitry Noskov
Declaring aspect

@Aspect
public class EmptyAspect {
}


<!--<context:annotation-config />-->
<aop:aspectj-autoproxy proxy-target-class="false | true"/>


<bean
class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator">
</bean>


<bean class="example.EmptyAspect"/>


                                        Spring Framework - AOP   Dmitry Noskov
Declaring pointcut




            Spring Framework - AOP   Dmitry Noskov
Pointcut designators
   code based
     execution
     within

     target

     this

     args

     bean




                  Spring Framework - AOP   Dmitry Noskov
Pointcut designators(2)
   annotation based
     @annotation
     @within

     @target

     @args




                       Spring Framework - AOP   Dmitry Noskov
Format of an execution expression
execution(
  modifiers-pattern
  returning-type-pattern
  declaring-type-pattern
  name-pattern(param-pattern)
  throws-pattern
)


                    Spring Framework - AOP   Dmitry Noskov
Simple pointcut expressions
@Aspect
public class ItemStatusTracker {


    @Pointcut("execution(* approve(..))")
    public void ifApprove() {}


    @Pointcut("execution(* reject(..))")
    public void ifReject() {}


    @Pointcut("ifApprove() || ifReject()")
    public void ifStateChange() {}
}



                            Spring Framework - AOP   Dmitry Noskov
Execution examples
any public method
execution(public * * (..))"

any method with a name beginning with "get"
execution(* get*(..))

any method defined by the appropriate interface
execution(* bank.BankService.*(..))

any method defined in the appropriate package
execution(* com.epam.pmc.service.*.*(..))

other examples
http://static.springsource.org/spring/docs/3.0.x/spring-framework-
reference/html/aop.html#aop-pointcuts-examples


                                         Spring Framework - AOP   Dmitry Noskov
Declaring advice




           Spring Framework - AOP   Dmitry Noskov
Advice
   associated with a pointcut expression
     a simple reference to a named pointcut
     a pointcut expression declared in place

   runs
     before
     after returning

     after throwing

     after (finally)

     around

                          Spring Framework - AOP   Dmitry Noskov
Before advice

@Aspect
public class BankAspect {


    @Pointcut("execution(public * * (..))")
    public void anyPublicMethod() {}


    @Before("anyPublicMethod()")
    public void logBefore(JoinPoint joinPoint) {
          //to do something
    }
}



                              Spring Framework - AOP   Dmitry Noskov
After returning advice

@Aspect
public class BankAspect {


    @AfterReturning(
          pointcut="execution(* get*(..))",
          returning="retVal")
    public void logAfter(JoinPoint joinPoint, Object retVal) {
          //to do something
    }
}




                                Spring Framework - AOP   Dmitry Noskov
After throwing advice

@Aspect
public class BankAspect {


    @AfterThrowing(
          pointcut = "execution(* bank..*ServiceImpl.add*(..))",
          throwing = "exception")
    public void afterThrowing(Exception exception) {
          //to do something
    }
}




                              Spring Framework - AOP   Dmitry Noskov
After finally advice

@Aspect
public class BankAspect {


    @Pointcut("execution(public * * (..))")
    public void anyPublicMethod() {}


    @After(value="anyPublicMethod() && args(from, to)")
    public void logAfter(JoinPoint jp, String from, String to) {
          //to do something
    }
}



                              Spring Framework - AOP   Dmitry Noskov
Around advice

@Aspect
public class BankCacheAspect {


    @Around("@annotation(bank.Cached)")
    public Object aroundCache(ProceedingJoinPoint joinPoint){
          //to do something before
          Object retVal = joinPoint.proceed();
          //to do something after
    }
}




                              Spring Framework - AOP   Dmitry Noskov
Aspect and advice ordering
   order of advice in the same aspect
     before
     around

     after finally

     after returning or after throwing

   Spring interface for ordering aspects
       org.springframework.core.Ordered
   Spring annotation
       org.springframework.core.annotation.Order
                            Spring Framework - AOP   Dmitry Noskov
XML based AOP




         Spring Framework - AOP   Dmitry Noskov
Declaring an aspect
<?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="…">

  <aop:config>
    <aop:aspect id="bankAspectId" ref="bankAspect">
      <aop:pointcut id="anyPublicMethod"
                    expression="execution(public * * (..))"/>

      <aop:before pointcut-ref="anyPublicMethod" method="logBefore"/>
    </aop:aspect>
  </aop:config>

  <bean id="bankAspect" class="bank.BankAspect"/>
</beans>


                                Spring Framework - AOP   Dmitry Noskov
How it all works




            Spring Framework - AOP   Dmitry Noskov
Bean in Spring container

Standard OOP implementation            Implementation with AOP




                              Spring Framework - AOP   Dmitry Noskov
AOP proxies

Invoke directly            Invoke via proxy




                  Spring Framework - AOP   Dmitry Noskov
How it really works




               Spring Framework - AOP   Dmitry Noskov
Introductions




            Spring Framework - AOP   Dmitry Noskov
Introduction behaviors to bean

@Aspect
public class CalculatorIntroduction {


    @DeclareParents(
          value = "calculator.ArithmeticCalculatorImpl",
          defaultImpl = MaxCalculatorImpl.class)
    public MaxCalculator maxCalculator;


    @DeclareParents(
          value = "calculator.ArithmeticCalculatorImpl",
          defaultImpl = MinCalculatorImpl.class)
    public MinCalculator minCalculator;
}


                              Spring Framework - AOP   Dmitry Noskov
Introduction states to bean

@Aspect
public class BankServiceIntroductionAspect {
    @DeclareParents(
          value="bank.BankServiceImpl",
          defaultImpl=DefaultCounterImpl.class)
    public Counter mix;


    @Before("execution(* get*(..)) && this(auditable)")
    public void useBusinessService(Counter auditable) {
          auditable.increment();
    }
}


                              Spring Framework - AOP   Dmitry Noskov
Spring AOP vs AspectJ

Spring AOP                           AspectJ

   no need for a special               need AspectJ compiler
    compilation process                  or setup LTW
   support only method                 support all pointcuts
    execution pointcuts
   advise the execution                advice all domain
    of operations on                     objects
    Spring beans

                            Spring Framework - AOP   Dmitry Noskov
@AspectJ vs XML

@AspectJ                           XML

   has more opportunities,           can be used with any
    such as combine named              JDK level
    pointcuts
   encapsulate the                   good choice to
    implementation of the              configure enterprise
    requirement it addresses           services
    in a single place


                          Spring Framework - AOP   Dmitry Noskov
Links
   Useful links
       Wiki: Aspect-oriented programming
        http://en.wikipedia.org/wiki/Aspect-oriented_programming
       Spring Reference
        http://static.springsource.org/spring/docs/3.0.x/spring-
        framework-reference/html/aop.html
       AspectJ home site
        http://www.eclipse.org/aspectj/




                               Spring Framework - AOP   Dmitry Noskov
Books




        Spring Framework - AOP   Dmitry Noskov
Questions




            Spring Framework - AOP   Dmitry Noskov
The end




             http://www.linkedin.com/in/noskovd

      http://www.slideshare.net/analizator/presentations

More Related Content

What's hot (20)

PDF
Spring Security
Knoldus Inc.
 
PPTX
Spring Web MVC
zeeshanhanif
 
PDF
REST APIs with Spring
Joshua Long
 
PDF
Spring MVC Framework
Hùng Nguyễn Huy
 
PPTX
Spring boot
Pradeep Shanmugam
 
PDF
Spring Framework
NexThoughts Technologies
 
PPTX
Spring boot
Gyanendra Yadav
 
PPTX
Spring boot Introduction
Jeevesh Pandey
 
PPTX
Spring Boot
Jiayun Zhou
 
PDF
Expressjs
Yauheni Nikanovich
 
PPTX
Spring boot - an introduction
Jonathan Holloway
 
PDF
Microservice With Spring Boot and Spring Cloud
Eberhard Wolff
 
PPTX
Hibernate ppt
Aneega
 
PDF
Introduction to Node.js
Rob O'Doherty
 
PDF
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Edureka!
 
PPTX
Spring Boot Tutorial
Naphachara Rattanawilai
 
PDF
Introduction to Java 11
Knoldus Inc.
 
PPTX
Introduction to Spring Boot
Purbarun Chakrabarti
 
PDF
Spring boot introduction
Rasheed Waraich
 
PDF
Express node js
Yashprit Singh
 
Spring Security
Knoldus Inc.
 
Spring Web MVC
zeeshanhanif
 
REST APIs with Spring
Joshua Long
 
Spring MVC Framework
Hùng Nguyễn Huy
 
Spring boot
Pradeep Shanmugam
 
Spring Framework
NexThoughts Technologies
 
Spring boot
Gyanendra Yadav
 
Spring boot Introduction
Jeevesh Pandey
 
Spring Boot
Jiayun Zhou
 
Spring boot - an introduction
Jonathan Holloway
 
Microservice With Spring Boot and Spring Cloud
Eberhard Wolff
 
Hibernate ppt
Aneega
 
Introduction to Node.js
Rob O'Doherty
 
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Edureka!
 
Spring Boot Tutorial
Naphachara Rattanawilai
 
Introduction to Java 11
Knoldus Inc.
 
Introduction to Spring Boot
Purbarun Chakrabarti
 
Spring boot introduction
Rasheed Waraich
 
Express node js
Yashprit Singh
 

Viewers also liked (20)

PDF
Spring Framework - Expression Language
Dzmitry Naskou
 
KEY
Spring AOP
Jeroen Rosenberg
 
PPTX
Introduction to Aspect Oriented Programming
Yan Cui
 
PDF
Spring Framework - MVC
Dzmitry Naskou
 
PDF
Spring Framework - Spring Security
Dzmitry Naskou
 
PDF
Spring Framework - Data Access
Dzmitry Naskou
 
PDF
AOP
Joshua Yoon
 
PDF
Spring Framework - Validation
Dzmitry Naskou
 
PDF
Spring Framework - Web Flow
Dzmitry Naskou
 
PPTX
Introduction to Aspect Oriented Programming
Amir Kost
 
PPTX
[Java eeconf 2016] spring jta principles of work with transactions. Dmytro S...
Dmytro Sokolov
 
ODP
Boas práticas no desenvolvimento de uma RESTful API
Fernando Camargo
 
ODP
Construção de Frameworks com Annotation e Reflection API em Java
Fernando Camargo
 
ODP
Banco de dados no Android com Couchbase Lite
Fernando Camargo
 
PDF
Design de RESTful APIs
Fernando Camargo
 
PPT
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf Conference
 
PPTX
Spring AOP in Nutshell
Onkar Deshpande
 
PDF
Профессиональная разработка в суровом Enterprise
Alexander Granin
 
PDF
Orm на no sql через jpa. Павел Вейник
Alina Dolgikh
 
PPTX
Spring aop concepts
RushiBShah
 
Spring Framework - Expression Language
Dzmitry Naskou
 
Spring AOP
Jeroen Rosenberg
 
Introduction to Aspect Oriented Programming
Yan Cui
 
Spring Framework - MVC
Dzmitry Naskou
 
Spring Framework - Spring Security
Dzmitry Naskou
 
Spring Framework - Data Access
Dzmitry Naskou
 
Spring Framework - Validation
Dzmitry Naskou
 
Spring Framework - Web Flow
Dzmitry Naskou
 
Introduction to Aspect Oriented Programming
Amir Kost
 
[Java eeconf 2016] spring jta principles of work with transactions. Dmytro S...
Dmytro Sokolov
 
Boas práticas no desenvolvimento de uma RESTful API
Fernando Camargo
 
Construção de Frameworks com Annotation e Reflection API em Java
Fernando Camargo
 
Banco de dados no Android com Couchbase Lite
Fernando Camargo
 
Design de RESTful APIs
Fernando Camargo
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf Conference
 
Spring AOP in Nutshell
Onkar Deshpande
 
Профессиональная разработка в суровом Enterprise
Alexander Granin
 
Orm на no sql через jpa. Павел Вейник
Alina Dolgikh
 
Spring aop concepts
RushiBShah
 
Ad

Similar to Spring Framework - AOP (20)

PPTX
spring aop.pptxfgfdgfdgfdgfdgfdgvbvcbvbcvbdf
zmulani8
 
PPTX
spring aop.pptx aspt oreinted programmin
zmulani8
 
PDF
Spring AOP
SHAKIL AKHTAR
 
PPTX
Spring aop
sanskriti agarwal
 
PPTX
spring aop
Kalyani Patil
 
PPT
Spring AOP
Lhouceine OUHAMZA
 
PPT
Spring AOP @ DevClub.eu
arsenikum
 
PPT
Spring aop
UMA MAHESWARI
 
PDF
Spring aop
Hamid Ghorbani
 
PPTX
Spring AOP
Radhakrishna Mutthoju
 
PDF
Spring framework aop
Taemon Piya-Lumyong
 
PPT
Aop spring
chamilavt
 
PPTX
Spring AOP Introduction
b0ris_1
 
PDF
AOP (Aspect-Oriented Programming) spring boot
PLAYAFIFI
 
PPTX
Spring framework AOP
Anuj Singh Rajput
 
PPTX
Spring aop
Harshit Choudhary
 
PDF
Aspect oriented programming with spring
Sreenivas Kappala
 
PPT
Spring AOP
AnushaNaidu
 
PDF
Aspect Oriented Programming and MVC with Spring Framework
Massimiliano Dessì
 
spring aop.pptxfgfdgfdgfdgfdgfdgvbvcbvbcvbdf
zmulani8
 
spring aop.pptx aspt oreinted programmin
zmulani8
 
Spring AOP
SHAKIL AKHTAR
 
Spring aop
sanskriti agarwal
 
spring aop
Kalyani Patil
 
Spring AOP
Lhouceine OUHAMZA
 
Spring AOP @ DevClub.eu
arsenikum
 
Spring aop
UMA MAHESWARI
 
Spring aop
Hamid Ghorbani
 
Spring framework aop
Taemon Piya-Lumyong
 
Aop spring
chamilavt
 
Spring AOP Introduction
b0ris_1
 
AOP (Aspect-Oriented Programming) spring boot
PLAYAFIFI
 
Spring framework AOP
Anuj Singh Rajput
 
Spring aop
Harshit Choudhary
 
Aspect oriented programming with spring
Sreenivas Kappala
 
Spring AOP
AnushaNaidu
 
Aspect Oriented Programming and MVC with Spring Framework
Massimiliano Dessì
 
Ad

Recently uploaded (20)

PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PDF
Biography of Daniel Podor.pdf
Daniel Podor
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
PDF
July Patch Tuesday
Ivanti
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
Biography of Daniel Podor.pdf
Daniel Podor
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
July Patch Tuesday
Ivanti
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 

Spring Framework - AOP

  • 1. Spring Framework - AOP SPRING FRAMEWORK 3.0 Dmitry Noskov Aspect Oriented Programming with Spring
  • 2. Aspect Oriented Programming Spring Framework - AOP Dmitry Noskov
  • 3. What is AOP?  is a programming paradigm  extends OOP  enables modularization of crosscutting concerns  is second heart of Spring Framework Spring Framework - AOP Dmitry Noskov
  • 4. A simple service method public Order getOrder(BigDecimal orderId) { return (Order) factory.openSession() .get(Order.class, orderId); } Spring Framework - AOP Dmitry Noskov
  • 5. Add permissions check public Order getOrder(BigDecimal orderId) { if (hasOrderPermission(orderId)) { return (Order) factory.openSession() .get(Order.class, orderId); } else { throw new SecurityException("Access Denied"); } } Spring Framework - AOP Dmitry Noskov
  • 6. Add transaction management public Order getOrder(BigDecimal orderId) { if (hasOrderPermission(orderId)) { Order order; Session session = factory.openSession(); Transaction tx = session.beginTransaction(); try { order = (Order) session.get(Order.class, orderId); tx.commit(); } catch (RuntimeException e) {if (tx!=null) {tx.rollback();} } finally {session.close();} return order; } else { throw new SecurityException("Access Denied");} } Spring Framework - AOP Dmitry Noskov
  • 7. Add cache public Order getOrder(BigDecimal orderId) { if (hasOrderPermission(orderId)) { Order order = (Order)cache.get(orderId); if (order==null) { Session session = factory.openSession(); Transaction tx = session.beginTransaction(); try { order = (Order) session.get(Order.class, orderId); tx.commit(); cache.put(orderId, order); } catch (RuntimeException e) {if (tx!=null) {tx.rollback();} } finally {session.close();} } return order; } else { throw new SecurityException("Access Denied");} } Spring Framework - AOP Dmitry Noskov
  • 8. A similar problem at enterprise level Spring Framework - AOP Dmitry Noskov
  • 9. What does AOP solve? Logging Validation Caching Security Transactions Monitoring Error Handling Etc… Spring Framework - AOP Dmitry Noskov
  • 10. AOP concepts  aspect  advice  pointcut  join point Spring Framework - AOP Dmitry Noskov
  • 11. AOP and OOP AOP OOP 1. Aspect – code unit that 1. Class – code unit that encapsulates pointcuts, advice, encapsulates methods and and attributes attributes 2. Pointcut – define the set of 2. Method signature – define the entry points (triggers) in which entry points for the execution of advice is executed method bodies 3. Advice – implementation of 3. Method bodies –implementation cross cutting concern of the business logic concerns 4. Weaver – construct code 4. Compiler – convert source code (source or object) with advice to object code Spring Framework - AOP Dmitry Noskov
  • 12. AOP concepts(2)  introduction  target object  AOP proxy  weaving  compile time  load time  runtime Spring Framework - AOP Dmitry Noskov
  • 13. Spring AOP  implemented in pure java  no need for a special compilation process  supports only method execution join points  only runtime weaving is available  AOP proxy  JDK dynamic proxy  CGLIB proxy  configuration  @AspectJ annotation-style  Spring XML configuration-style Spring Framework - AOP Dmitry Noskov
  • 14. @AspectJ Spring Framework - AOP Dmitry Noskov
  • 15. Declaring aspect @Aspect public class EmptyAspect { } <!--<context:annotation-config />--> <aop:aspectj-autoproxy proxy-target-class="false | true"/> <bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator"> </bean> <bean class="example.EmptyAspect"/> Spring Framework - AOP Dmitry Noskov
  • 16. Declaring pointcut Spring Framework - AOP Dmitry Noskov
  • 17. Pointcut designators  code based  execution  within  target  this  args  bean Spring Framework - AOP Dmitry Noskov
  • 18. Pointcut designators(2)  annotation based  @annotation  @within  @target  @args Spring Framework - AOP Dmitry Noskov
  • 19. Format of an execution expression execution( modifiers-pattern returning-type-pattern declaring-type-pattern name-pattern(param-pattern) throws-pattern ) Spring Framework - AOP Dmitry Noskov
  • 20. Simple pointcut expressions @Aspect public class ItemStatusTracker { @Pointcut("execution(* approve(..))") public void ifApprove() {} @Pointcut("execution(* reject(..))") public void ifReject() {} @Pointcut("ifApprove() || ifReject()") public void ifStateChange() {} } Spring Framework - AOP Dmitry Noskov
  • 21. Execution examples any public method execution(public * * (..))" any method with a name beginning with "get" execution(* get*(..)) any method defined by the appropriate interface execution(* bank.BankService.*(..)) any method defined in the appropriate package execution(* com.epam.pmc.service.*.*(..)) other examples http://static.springsource.org/spring/docs/3.0.x/spring-framework- reference/html/aop.html#aop-pointcuts-examples Spring Framework - AOP Dmitry Noskov
  • 22. Declaring advice Spring Framework - AOP Dmitry Noskov
  • 23. Advice  associated with a pointcut expression  a simple reference to a named pointcut  a pointcut expression declared in place  runs  before  after returning  after throwing  after (finally)  around Spring Framework - AOP Dmitry Noskov
  • 24. Before advice @Aspect public class BankAspect { @Pointcut("execution(public * * (..))") public void anyPublicMethod() {} @Before("anyPublicMethod()") public void logBefore(JoinPoint joinPoint) { //to do something } } Spring Framework - AOP Dmitry Noskov
  • 25. After returning advice @Aspect public class BankAspect { @AfterReturning( pointcut="execution(* get*(..))", returning="retVal") public void logAfter(JoinPoint joinPoint, Object retVal) { //to do something } } Spring Framework - AOP Dmitry Noskov
  • 26. After throwing advice @Aspect public class BankAspect { @AfterThrowing( pointcut = "execution(* bank..*ServiceImpl.add*(..))", throwing = "exception") public void afterThrowing(Exception exception) { //to do something } } Spring Framework - AOP Dmitry Noskov
  • 27. After finally advice @Aspect public class BankAspect { @Pointcut("execution(public * * (..))") public void anyPublicMethod() {} @After(value="anyPublicMethod() && args(from, to)") public void logAfter(JoinPoint jp, String from, String to) { //to do something } } Spring Framework - AOP Dmitry Noskov
  • 28. Around advice @Aspect public class BankCacheAspect { @Around("@annotation(bank.Cached)") public Object aroundCache(ProceedingJoinPoint joinPoint){ //to do something before Object retVal = joinPoint.proceed(); //to do something after } } Spring Framework - AOP Dmitry Noskov
  • 29. Aspect and advice ordering  order of advice in the same aspect  before  around  after finally  after returning or after throwing  Spring interface for ordering aspects  org.springframework.core.Ordered  Spring annotation  org.springframework.core.annotation.Order Spring Framework - AOP Dmitry Noskov
  • 30. XML based AOP Spring Framework - AOP Dmitry Noskov
  • 31. Declaring an aspect <?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="…"> <aop:config> <aop:aspect id="bankAspectId" ref="bankAspect"> <aop:pointcut id="anyPublicMethod" expression="execution(public * * (..))"/> <aop:before pointcut-ref="anyPublicMethod" method="logBefore"/> </aop:aspect> </aop:config> <bean id="bankAspect" class="bank.BankAspect"/> </beans> Spring Framework - AOP Dmitry Noskov
  • 32. How it all works Spring Framework - AOP Dmitry Noskov
  • 33. Bean in Spring container Standard OOP implementation Implementation with AOP Spring Framework - AOP Dmitry Noskov
  • 34. AOP proxies Invoke directly Invoke via proxy Spring Framework - AOP Dmitry Noskov
  • 35. How it really works Spring Framework - AOP Dmitry Noskov
  • 36. Introductions Spring Framework - AOP Dmitry Noskov
  • 37. Introduction behaviors to bean @Aspect public class CalculatorIntroduction { @DeclareParents( value = "calculator.ArithmeticCalculatorImpl", defaultImpl = MaxCalculatorImpl.class) public MaxCalculator maxCalculator; @DeclareParents( value = "calculator.ArithmeticCalculatorImpl", defaultImpl = MinCalculatorImpl.class) public MinCalculator minCalculator; } Spring Framework - AOP Dmitry Noskov
  • 38. Introduction states to bean @Aspect public class BankServiceIntroductionAspect { @DeclareParents( value="bank.BankServiceImpl", defaultImpl=DefaultCounterImpl.class) public Counter mix; @Before("execution(* get*(..)) && this(auditable)") public void useBusinessService(Counter auditable) { auditable.increment(); } } Spring Framework - AOP Dmitry Noskov
  • 39. Spring AOP vs AspectJ Spring AOP AspectJ  no need for a special  need AspectJ compiler compilation process or setup LTW  support only method  support all pointcuts execution pointcuts  advise the execution  advice all domain of operations on objects Spring beans Spring Framework - AOP Dmitry Noskov
  • 40. @AspectJ vs XML @AspectJ XML  has more opportunities,  can be used with any such as combine named JDK level pointcuts  encapsulate the  good choice to implementation of the configure enterprise requirement it addresses services in a single place Spring Framework - AOP Dmitry Noskov
  • 41. Links  Useful links  Wiki: Aspect-oriented programming http://en.wikipedia.org/wiki/Aspect-oriented_programming  Spring Reference http://static.springsource.org/spring/docs/3.0.x/spring- framework-reference/html/aop.html  AspectJ home site http://www.eclipse.org/aspectj/ Spring Framework - AOP Dmitry Noskov
  • 42. Books Spring Framework - AOP Dmitry Noskov
  • 43. Questions Spring Framework - AOP Dmitry Noskov
  • 44. The end http://www.linkedin.com/in/noskovd http://www.slideshare.net/analizator/presentations