07 Spring Aop1

download 07 Spring Aop1

of 48

Transcript of 07 Spring Aop1

  • 7/31/2019 07 Spring Aop1

    1/48

    2008 coreservlets.com

    Part 1

    Originals of Slides and Source Code for Examples:

    http://courses.coreservlets.com/Course-Materials/spring.html

    Customized Java EE Training: http://courses.coreservlets.com/Servlets, JSP, Struts, JSF/MyFaces/Facelets, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6.

    Developed and taught by well-known author and developer. At public venues or onsite at your location.

    2008 coreservlets.com

    For live Spring & Hibernate training, seecourses a p: courses.coreserv e s.com .Taught by the experts that brought you this tutorial.

    ,can be held on-site at your organization.

    Customized Java EE Training: http://courses.coreservlets.com/Servlets, JSP, Struts, JSF/MyFaces/Facelets, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6.

    Developed and taught by well-known author and developer. At public venues or onsite at your location.

    ourses eve ope an aug y ar y a Java 5, Java 6, intermediate/beginning servlets/JSP, advanced servlets/JSP, Struts, JSF, Ajax, GWT, custom mix of topics

    Courses developed and taught by coreservlets.com experts (edited by Marty) Spring, Hibernate/JPA, EJB3, Ruby/Rails

    Contact [email protected] for details

  • 7/31/2019 07 Spring Aop1

    2/48

    Topics in This Section

    Aspect-oriented programming concepts

    Introduction

    Integration with Spring IoC

    Program integration using pointcuts

    Java EE trainin : htt ://courses.coreservlets.com4

    2008 coreservlets.com

    spec - r en e

    Customized Java EE Training: http://courses.coreservlets.com/Servlets, JSP, Struts, JSF/MyFaces/Facelets, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6.

    Developed and taught by well-known author and developer. At public venues or onsite at your location.

  • 7/31/2019 07 Spring Aop1

    3/48

    Aspect-Oriented Programming

    Addresses broad applicationresponsibilities

    Logging

    Transaction management

    Error management

    o u ar zes respons ye.g., logging

    element

    Java EE trainin : htt ://courses.coreservlets.com6

    Aspect-Oriented Programming

    Identifies program facets Uses mechanisms beyond traditional OO models

    e.g., All POJO getter methods fromcom.company.persistence package class members

    Target execution point is thejoin point e.g., constructor or method invocation

    rogram component n ng t e execut on target s apointcut

    An aspect is a single unit associating and applying an

    advice to ointcuts

    Java EE trainin : htt ://courses.coreservlets.com7

  • 7/31/2019 07 Spring Aop1

    4/48

    Spring AOP

    Programming modelMethod-only interceptors

    AdvisorCaptures advice behavior using plain POJOs

    AspectJ APIs nno a ons an rary s

    Advice beans are well-formed

    Conform to method conventions but not special interfaces

    AOP Alliance APIs

    Advice beans implement interfaces

    Java EE trainin : htt ://courses.coreservlets.com

    8

    Spring AOP Continued

    PointcutAspectJ API annotations mapped to bean methods

    Spring AOP XML schema pointcut declarations

    AspectAspectJ advice with advice and pointcut definitions

    us ng spec anno a ons

    Spring AOP XML schema aspect declarations

    Java EE trainin : htt ://courses.coreservlets.com9

  • 7/31/2019 07 Spring Aop1

    5/48

    2008 coreservlets.com

    General Spring IoC

    Customized Java EE Training: http://courses.coreservlets.com/Servlets, JSP, Struts, JSF/MyFaces/Facelets, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6.

    Developed and taught by well-known author and developer. At public venues or onsite at your location.

    Spring IoC Process Develop POJO library

    . , . ,coreservlets.MockCustomerQuery

    Register Spring JARs spring-core.jar, spring-context.jar , spring-beans.jar , commons-logging.jar

    Create the bean definitions file classpath:/coreservletsContext.xml

    Register beans" " =

    class="coreservlets.MockCustomerQuery" />

    Inject dependencies

    Initialize the container BeanFactory beanFactory = new ClassPathXmlApplicationContext(

    new String[]{"classpath:/ coreservletsContext.xml"});

    Java EE trainin : htt ://courses.coreservlets.com

    CustomerQuery customerQuery =

    (CustomerQuery) beanFactory.getBean("customerQuery");

  • 7/31/2019 07 Spring Aop1

    6/48

    Develop POJO Library

    public class Customer {

    private String id;

    private String name;

    public Customer(String id, String name){

    this.id = id;

    this.name = name;

    public String getId() {

    return id;

    }

    public String getName() {

    return name;

    }

    Java EE trainin : htt ://courses.coreservlets.com

    Develop POJO Librarypublic interface CustomerQuery {

    public Customer getCustomerByName(String name);

    }

    Java EE trainin : htt ://courses.coreservlets.com

  • 7/31/2019 07 Spring Aop1

    7/48

    Develop POJO Library

    public class MockCustomerQuery implements CustomerQuery {

    private List customers;

    public MockCustomerQuery(Listcustomers) {

    this.customers = customers;

    }

    for(Customer c : customers){

    if(c.getName().equals(name)){

    return c;

    }

    }

    return null;

    Java EE trainin : htt ://courses.coreservlets.com

    }

    Create Bean Definitions

    Location classpath:/coreservletsContext.xml

    < eans xm ns=" ttp: www.spr ng ramewor .org sc ema eans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

    htt : www.s rin framework.or schema beans s rin -beans-2.5.xsd">

    Java EE trainin : htt ://courses.coreservlets.com

  • 7/31/2019 07 Spring Aop1

    8/48

    Register Beans and

    Java EE trainin : htt ://courses.coreservlets.com

    < ean>

    Access and Use Beansimport org.springframework.context.support.*;

    ublic class Main

    public static void main(String[]args) {

    BeanFactory beanFactory =

    new ClassPathXmlApplicationContext(

    "/coreservletsContext.xml");

    (CustomerQuery) beanFactory.getBean("customerQuery");

    Customer customer = query.getCustomerByName("Java Joe");

    System.out.println(customer);

    }

    Java EE trainin : htt ://courses.coreservlets.com

    Standard output

    Customer id=jjoe, name=Java Joe

  • 7/31/2019 07 Spring Aop1

    9/48

    2008 coreservlets.com

    pr ng

    Customized Java EE Training: http://courses.coreservlets.com/Servlets, JSP, Struts, JSF/MyFaces/Facelets, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6.

    Developed and taught by well-known author and developer. At public venues or onsite at your location.

    Spring AOP JARs

    spring-aop.jar

    aopalliance.jar

    aspectjweaver.jar

    cglib.jar

    Java EE trainin : htt ://courses.coreservlets.com19

  • 7/31/2019 07 Spring Aop1

    10/48

    Spring AOP Hello World

    Identify concern

    e ec o n po n s All methods exposed by coreservlets.CustomerQuery

    Create advice e.g., implement org.aopalliance.intercept.MethodInterceptor

    Create AOP definitions file Create file classpath:/coreservletsAopContext.xml

    Registerspring-aop NS

    Register advice beans

    Create pointcut definitions

    Identifty join points

    Java EE trainin : htt ://courses.coreservlets.com

    Define aspects

    20

    Select Join Points

    All persistence methods coreservlets.CustomerQuerymethod

    implementations

    public interface CustomerQuery {

    public Customer getCustomerByName(String name);

    }

    Java EE trainin : htt ://courses.coreservlets.com21

  • 7/31/2019 07 Spring Aop1

    11/48

    Select Join Points

    public class MockCustomerQuery implements CustomerQuery {

    private List customers;

    public MockCustomerQuery(Listcustomers) {

    this.customers = customers;

    }

    for(Customer c : customers){

    if(c.getName().equals(name)){

    return c;

    }

    }

    return null;

    Java EE trainin : htt ://courses.coreservlets.com

    }

    22

    Create Adviceimport org.aopalliance.intercept.MethodInterceptor;

    im ort or .ao alliance.interce t.MethodInvocation

    import coreservlets.Customer;

    public class HelloWorldAdvice implements MethodInterceptor {

    public Object invoke(MethodInvocation invocation)

    return new Customer(){

    public String toString(){

    return "Hello World!";

    }

    };

    Java EE trainin : htt ://courses.coreservlets.com

    }

    }23

  • 7/31/2019 07 Spring Aop1

    12/48

    Create AOP Definitions File

    Location classpath:/coreservletsAopContext.xml

    < eans xm ns=" ttp: www.spr ng ramewor .org sc ema eans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:aop="http://www.springframework.org/schema/aop"

    xsi:schemaLocation="htt : www.s rin framework.or schema beans

    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

    http://www.springframework.org/schema/aop

    http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

    Java EE trainin : htt ://courses.coreservlets.com

    Register Advice Beans

    " "

    class="coreservlets.aop.helloworld.HelloWorldAdvice" />

    Java EE trainin : htt ://courses.coreservlets.com25

  • 7/31/2019 07 Spring Aop1

    13/48

    Create Pointcut Definitions

    " "

    class="coreservlets.aop.helloworld.HelloWorldAdvice" />

    Java EE trainin : htt ://courses.coreservlets.com

    < eans>

    26

    Define Aspects

    " "

    class="coreservlets.aop.helloworld.HelloWorldAdvice" />

    27

  • 7/31/2019 07 Spring Aop1

    14/48

    Domain Beans

    Java EE trainin : htt ://courses.coreservlets.com

    < ean>

    Initialize Spring IoC Containerimport org.springframework.context.support.*;

    public class Main {

    public static void main(String[]args) {

    BeanFactory beanFactory =

    new ClassPathXmlApplicationContext(

    "/coreservletsContext.xml",

    " ".

    ...

    }

    }

    Java EE trainin : htt ://courses.coreservlets.com

  • 7/31/2019 07 Spring Aop1

    15/48

    Access and Use Beans

    import org.springframework.context.support.*;

    ublic class Main

    public static void main(String[]args) {

    BeanFactory beanFactory =new ClassPathXmlApplicationContext(new String[]{

    "/coreservletsContext.xml"});

    CustomerQuery query =

    " "

    Omitted

    classpath:/coreservletsAopContext.xml

    .

    Customer customer = query.getCustomerByName("Java Joe");

    System.out.println(customer);

    }

    }

    Java EE trainin : htt ://courses.coreservlets.com

    Standard output

    Customer id=jjoe, name=Java Joe

    Access and Use Beansimport org.springframework.context.support.*;

    ublic class Main

    public static void main(String[]args) {

    BeanFactory beanFactory =

    new ClassPathXmlApplicationContext(new String[]{

    "/coreservletsContext.xml",

    "/coreservletsAopContext.xml"});

    (CustomerQuery) beanFactory.getBean("customerQuery");

    Customer customer = query.getCustomerByName("Java Joe");

    System.out.println(customer);

    }Output overridden

    by bean advisor

    Java EE trainin : htt ://courses.coreservlets.com

    Standard output

    Hello World!

  • 7/31/2019 07 Spring Aop1

    16/48

    2008 coreservlets.com

    n egra e rocess

    Customized Java EE Training: http://courses.coreservlets.com/Servlets, JSP, Struts, JSF/MyFaces/Facelets, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6.

    Developed and taught by well-known author and developer. At public venues or onsite at your location.

    Integrated Process ,

    Develop POJO library e.g., coreservlets.Customer,

    coreservlets.CustomerQuery,coreservlets.MockCustomerQuery

    Register Spring IoC and AOP JARs spring-core.jar, spring-context.jar, spring-beans.jar, spring-aop.jar,

    ao alliance. aras ect weaver. arc lib. ar commons-lo in . ar

    Create the bean definitions file e.g., classpath:/coreservletsContext.xml

    eg s er eans e.g.,

    Java EE trainin : htt ://courses.coreservlets.com

    Inject dependencies e.g.,

    e.g.,

  • 7/31/2019 07 Spring Aop1

    17/48

    Integrated Process,

    Identify concern

    e ec o n po n s All methods exposed by coreservlets.CustomerQuery

    Create advice e.g., implement org.aopalliance.intercept.MethodInterceptor

    Create AOP definitions file Create file classpath:/coreservletsAopContext.xml

    Registerspring-aop NS

    Register advice beans

    Create pointcut definitions

    Identifty join points

    Java EE trainin : htt ://courses.coreservlets.com

    Define aspects

    34

    Integrated Process ,

    Initialize the container Specify both domain bean and Spring AOP definitions paths

    e.g., BeanFactory beanFactory =new ClassPathXmlApplicationContext(

    "classpath:/coreservletsContext.xml",

    "classpath:/coreservletsAopContext.xml"});

    e.g., CustomerQuery customerQuery = (CustomerQuery)

    beanFactory.getBean("customerQuery");

    Java EE trainin : htt ://courses.coreservlets.com35

  • 7/31/2019 07 Spring Aop1

    18/48

    2008 coreservlets.com

    ress ng e

    Customized Java EE Training: http://courses.coreservlets.com/Servlets, JSP, Struts, JSF/MyFaces/Facelets, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6.

    Developed and taught by well-known author and developer. At public venues or onsite at your location.

    Pointcuts

    Join point Identifies a program execution point

    Pointcut

    Defined by using general specifications about a class system

    Enclosing class Supertype

    Modifier

    Name

    Package namespace

    Method

    Name

    Java EE trainin : htt ://courses.coreservlets.com

    Return type

    Argument types

    37

  • 7/31/2019 07 Spring Aop1

    19/48

    Pointcut Definition (PCD)

    Keywords execution

    Method signature matching expression Matching includes supertypes

    within

    Package and class name matching expression

    Matching does not include supertypes

    this

    Class or supertype matching expression

    Matches on the rox bean

    target

    Class or supertype matching expression

    Java EE trainin : htt ://courses.coreservlets.com

    38

    Pointcut Definition (PCD)

    Keywords continued

    args

    Method parameter matching expression

    Includes runtime supertypes

    e nes w en com ne w t anot er ; e.g. arge

    Also maps join point parameters to advice bean parameters

    beans Bean identfier pattern matching expression

    Operators

    Combines expression combinations using logical operators:AND, OR,

    NOT

    Context @or .as ect .lan .annotation.Pointcut content

    Java EE trainin : htt ://courses.coreservlets.com

    Spring AOP XML expression attribute value

    39

  • 7/31/2019 07 Spring Aop1

    20/48

    2008 coreservlets.com

    Execution PCD

    Customized Java EE Training: http://courses.coreservlets.com/Servlets, JSP, Struts, JSF/MyFaces/Facelets, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6.

    Developed and taught by well-known author and developer. At public venues or onsite at your location.

    Execution PCD Details

    PCD Expression

    *.

    ()

    Expression elements Access modifier*

    Enclosing package and class name pattern *

    Method name pattern

    Method ar ument ex ression attern

    Expression example execution(java.lang.String get*())

    Java EE trainin : htt ://courses.coreservlets.com

    *optional

    41

  • 7/31/2019 07 Spring Aop1

    21/48

    Execution PCD Guidelines

    Required/optional Optional elements can be fully omitted

    Required elements must be represented explicitly or using aattern; e. ., execution(* *(..))

    Pattern All expression elements can be replaced fully or partially

    us ng a pa ern Root expression element such as enclosing package/class name

    coreservlets.CustomerQuery

    coreservlets.Customer

    coreservlets.Customer*

    Argument sub-expression

    Java EE trainin : htt ://courses.coreservlets.com

    (*)

    (coreservlets.Customer*)

    42

    Execution PCD Guidelines

    Argument sub-expression optionsZero, one, or more arguments

    ()

    . .

    (java.lang.String,java.lang.String)

    (java.lang.String,java.lang.String,*)Any argument set

    (..)

    Java EE trainin : htt ://courses.coreservlets.com43

  • 7/31/2019 07 Spring Aop1

    22/48

    Integrated Process,

    Develop POJO library e.g., coreservlets.Customer,

    coreservlets.CustomerQuery,coreservlets.MockCustomerQuery

    Register Spring IoC and AOP JARs spring-core.jar, spring-context.jar, spring-beans.jar, spring-aop.jar,

    ao alliance. ar as ect weaver. ar c lib. ar commons-lo in . ar

    Create the bean definitions file e.g., classpath:/coreservletsContext.xml

    eg s er eans e.g.,

    Java EE trainin : htt ://courses.coreservlets.com

    Inject dependencies e.g.,

    e.g.,

    Integrated Process , Identify concern

    e ec o n po n s All methods exposed by coreservlets.CustomerQuery

    Create advice e.g., implement org.aopalliance.intercept.MethodInterceptor

    Create AOP definitions file

    Create file classpath:/coreservletsAopContext.xml Registerspring-aop NS

    Register advice beans

    Create pointcut definitions Identifty join points

    Java EE trainin : htt ://courses.coreservlets.com

    Define aspects

    45

  • 7/31/2019 07 Spring Aop1

    23/48

    Integrated Process,

    Initialize the container Specify both domain bean and Spring AOP definitions paths

    e.g., BeanFactory beanFactory =new ClassPathXmlApplicationContext(

    "classpath:/coreservletsContext.xml",

    "classpath:/coreservletsAopContext.xml"});

    e.g., CustomerQuery customerQuery = (CustomerQuery)

    beanFactory.getBean("customerQuery");

    Java EE trainin : htt ://courses.coreservlets.com46

    Execution PCD Process

    classpath:/coreservletsContext.xml

    - >

    = =

    Java EE trainin : htt ://courses.coreservlets.com

  • 7/31/2019 07 Spring Aop1

    24/48

    Select Join Points

    All persistence methods coreservlets.CustomerQuerymethod

    implementations

    public interface CustomerQuery {

    public Customer getCustomerByName(String name);

    }

    Java EE trainin : htt ://courses.coreservlets.com48

    Select Join Pointspublic class MockCustomerQuery implements CustomerQuery {

    private List customers;

    public MockCustomerQuery(Listcustomers) {

    this.customers = customers;

    }

    for(Customer c : customers){

    if(c.getName().equals(name)){

    return c;

    }

    }

    return null;

    Java EE trainin : htt ://courses.coreservlets.com

    }

    49

  • 7/31/2019 07 Spring Aop1

    25/48

    Create Advice

    import org.aopalliance.intercept.*

    public class SummarizingMethodAdvice

    implements MethodInterceptor {

    public Object invoke(MethodInvocation inv)

    throws Throwable {

    ...

    return inv.proceed();

    ...

    }

    }

    Java EE trainin : htt ://courses.coreservlets.com50

    Create Advice Continuedpublic Object invoke(MethodInvocation inv) throws Throwable {

    Strin buffer = inv. etMethod().toGenericStrin ()

    + ". args=" + Arrays.toString(inv.getArguments());

    try{

    Object returnValue = inv.proceed();

    buffer += ". exit=return[" + returnValue + "]";

    return returnValue;

    }

    buffer += " - exit=error[" + t + "]";

    throw t;

    }

    finally{

    Logger log = Logger.getLogger(inv.getThis().getClass());

    log.debug(">>>" + buffer);

    Java EE trainin : htt ://courses.coreservlets.com

    }

    51

  • 7/31/2019 07 Spring Aop1

    26/48

    Create AOP Definitions

    Location classpath:/coreservletsAopContext.xml

    < eans xm ns=" ttp: www.spr ng ramewor .org sc ema eans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:aop="http://www.springframework.org/schema/aop"

    xsi:schemaLocation="htt : www.s rin framework.or schema beans

    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

    http://www.springframework.org/schema/aop

    http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

    Java EE trainin : htt ://courses.coreservlets.com

    Register Advice Beans

    Java EE trainin : htt ://courses.coreservlets.com53

  • 7/31/2019 07 Spring Aop1

    27/48

    Define Pointcuts

    Execution PCD expression

    Method name

    pattern

    Return type Method parameter type

    expression

    Omitted access modifier

    and package/class name

    Java EE trainin : htt ://courses.coreservlets.com54

    Define Aspects

    Advisor

    reference

    Pointcut

    reference

    Java EE trainin : htt ://courses.coreservlets.com55

  • 7/31/2019 07 Spring Aop1

    28/48

    Initialize Spring IoC Container

    import org.springframework.context.support.*;

    public class Main {

    public static void main(String[]args) {

    BeanFactory beanFactory =

    new ClassPathXmlApplicationContext(

    "/coreservletsContext.xml",

    " ".

    ...

    }

    }

    Java EE trainin : htt ://courses.coreservlets.com

    Access and Use Beansimport org.springframework.context.support.*;

    ublic class Main

    public static void main(String[]args) {

    BeanFactory beanFactory =

    new ClassPathXmlApplicationContext(new String[]{

    m e

    classpath:/coreservletsAopContext.xm

    "/coreservletsContext.xml"});

    CustomerQuery query =

    (CustomerQuery) beanFactory.getBean("customerQuery");

    " " .

    }

    }Standard output

    Java EE trainin : htt ://courses.coreservlets.com

  • 7/31/2019 07 Spring Aop1

    29/48

    Access and Use Beans

    import org.springframework.context.support.*;

    ublic class Main

    public static void main(String[]args) {

    BeanFactory beanFactory =new ClassPathXmlApplicationContext(new String[]{

    "/coreservletsContext.xml",

    "/coreservletsAopContext.xml"});

    CustomerQuery query =

    " ".

    Customer customer = query.getCustomerByName("Java Joe");

    }

    }

    Standard output

    >>> public java.lang.String coreservlets.Customer.getName().

    args=[]. exit=return[Java Joe]

    >>> public java.lang.String coreservlets.Customer.toString().

    args=[]. exit=return[Customer id=jjoe, name=Java Joe]

    Java EE trainin : htt ://courses.coreservlets.com

    >>> public abstract coreservlets.Customer

    coreservlets.CustomerQuery.getCustomerByName(java.lang.String).

    args=[Java Joe]. exit=return[Customer id=jjoe, name=Java Joe]

    Execution PCD Match Origins>>> public java.lang.String coreservlets.Customer.getName().

    args=[]. exit=return[Java Joe]

    >>> public java.lang.String coreservlets.Customer.toString().

    args=[]. exit=return[Customer id=jjoe, name=Java Joe]

    >>> ublic abstract coreservlets.Customer

    public class MockCustomerQuery implements CustomerQuery {

    coreservlets.CustomerQuery.getCustomerByName(java.lang.String).

    args=[Java Joe]. exit=return[Customer id=jjoe, name=Java Joe]

    ...

    public Customer getCustomerByName(String name) {

    for(Customer customer : customers){

    f(customer.getName().equals(name)){

    return customer;

    } execution(* *(..))

    Java EE trainin : htt ://courses.coreservlets.com

    return null;

    }

    }59

  • 7/31/2019 07 Spring Aop1

    30/48

    Execution PCD Match Origins

    >>> public java.lang.String coreservlets.Customer.getName().

    args=[]. exit=return[Java Joe]

    >>> public java.lang.String coreservlets.Customer.toString().

    args=[]. exit=return[Customer id=jjoe, name=Java Joe]

    >>> ublic abstract coreservlets.Customer

    coreservlets.CustomerQuery.getCustomerByName(java.lang.String).

    args=[Java Joe]. exit=return[Customer id=jjoe, name=Java Joe]

    public class SummarizingMethodAdvice

    public Object invoke(MethodInvocation inv)

    throws Throwable {

    ...

    Object returnValue = inv.proceed();

    execution(* *(..))

    Java EE trainin : htt ://courses.coreservlets.com

    u er += ". ex t=return " + returnVa ue + " ";

    ...

    }60

    Execution PCD Match Origins>>> public java.lang.String coreservlets.Customer.getName().

    args=[]. exit=return[Java Joe]

    >>> public java.lang.String coreservlets.Customer.toString().

    args=[]. exit=return[Customer id=jjoe, name=Java Joe]

    >>> ublic abstract coreservlets.Customer

    coreservlets.CustomerQuery.getCustomerByName(java.lang.String).

    args=[Java Joe]. exit=return[Customer id=jjoe, name=Java Joe]

    public static void main(String[]args) {

    BeanFactory beanFactory =

    new ClassPathXmlApplicationContext(new String[]{

    "/coreservletsContext.xml",

    "/coreservletsAopContext.xml"});

    CustomerQuery query =

    execution(* *(..))

    Java EE trainin : htt ://courses.coreservlets.com

    CustomerQuery eanFactory.getBean "customerQuery" ;

    Customer customer = query.getCustomerByName("Java Joe");

    }61

  • 7/31/2019 07 Spring Aop1

    31/48

    More Execution PCD Examples

    Drop access modifier aop:po n cu

    expression="execution(coreservlets.Customer

    coreservlets.CustomerQuery.getCustomerByName(

    ". .

    Any access modifier and return type

    ny access mo er, re urn ype an coreserv e spackage 62

    More Execution PCD Examples

    Any access modifier, return type, package, class, and

    ny pu c ean proper y ge er me o

    Any public bean property setter method

    Java EE trainin : htt ://courses.coreservlets.com63

  • 7/31/2019 07 Spring Aop1

    32/48

    2008 coreservlets.com

    Within PCD

    Customized Java EE Training: http://courses.coreservlets.com/Servlets, JSP, Struts, JSF/MyFaces/Facelets, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6.

    Developed and taught by well-known author and developer. At public venues or onsite at your location.

    Within PCD Details

    PCD Expression

    Expression elements Enclosing package and class name pattern

    xpress on examp e within(coreservlets.MockCustomerQuery)

    Java EE trainin : htt ://courses.coreservlets.com65

  • 7/31/2019 07 Spring Aop1

    33/48

    Within PCD Guidelines

    Match target Matches on the instantiated/concrete bean type

    Does not match on target bean supertypes e.g., coreservlets.CustomerQuerywill not match on an

    instantiation ofcoreservlets.MockCustomerQuery

    Does not match on method signature elements

    Expression supports partial or full replacement using

    wildcard(s)

    Java EE trainin : htt ://courses.coreservlets.com66

    Integrated Process ,

    Develop POJO library e.g., coreservlets.Customer,

    coreservlets.CustomerQuery,coreservlets.MockCustomerQuery

    Register Spring IoC and AOP JARs spring-core.jar, spring-context.jar, spring-beans.jar, spring-aop.jar,

    ao alliance. ar as ect weaver. ar c lib. ar commons-lo in . ar

    Create the bean definitions file e.g., classpath:/coreservletsContext.xml

    eg s er eans e.g.,

    Java EE trainin : htt ://courses.coreservlets.com

    Inject dependencies e.g.,

    e.g.,

  • 7/31/2019 07 Spring Aop1

    34/48

    Integrated Process,

    Identify concern

    e ec o n po n s All methods exposed by coreservlets.CustomerQuery

    Create advice e.g., implement org.aopalliance.intercept.MethodInterceptor

    Create AOP definitions file Create file classpath:/coreservletsAopContext.xml

    Registerspring-aop NS

    Register advice beans

    Create pointcut definitions

    Identifty join points

    Java EE trainin : htt ://courses.coreservlets.com

    Define aspects

    68

    Integrated Process ,

    Initialize the container Specify both domain bean and Spring AOP definitions paths

    e.g., BeanFactory beanFactory =new ClassPathXmlApplicationContext(

    "classpath:/coreservletsContext.xml",

    "classpath:/coreservletsAopContext.xml"});

    e.g., CustomerQuery customerQuery = (CustomerQuery)

    beanFactory.getBean("customerQuery");

    Java EE trainin : htt ://courses.coreservlets.com69

  • 7/31/2019 07 Spring Aop1

    35/48

    Execution PCD Process

    classpath:/coreservletsContext.xml

    - >

    = =

    Java EE trainin : htt ://courses.coreservlets.com

    Select Join Points

    General coreservlets library methods coreservletspackage members

    All class member methods ex ression="within(coreservlets.*)"

    coreservlets.Customer

    coreservlets.CustomerQuerycoreservlets.MockCustomerQuery

    coreservlets.jdbc.JdbcCustomerQuery

    Java EE trainin : htt ://courses.coreservlets.com71

  • 7/31/2019 07 Spring Aop1

    36/48

    Create Advice

    import org.aopalliance.intercept.*

    public class SummarizingMethodAdvice

    implements MethodInterceptor {

    public Object invoke(MethodInvocation inv)

    throws Throwable {

    ...

    return inv.proceed();

    ...

    }

    }

    Java EE trainin : htt ://courses.coreservlets.com72

    Create Advice Continuedpublic Object invoke(MethodInvocation inv) throws Throwable {

    Strin buffer = inv. etMethod().toGenericStrin ()

    + ". args=" + Arrays.toString(inv.getArguments());

    try{

    Object returnValue = inv.proceed();

    buffer += ". exit=return[" + returnValue + "]";

    return returnValue;

    }

    buffer += " - exit=error[" + t + "]";

    throw t;

    }

    finally{

    Logger log = Logger.getLogger(inv.getThis().getClass());

    log.debug(">>>" + buffer);

    Java EE trainin : htt ://courses.coreservlets.com

    }

    73

  • 7/31/2019 07 Spring Aop1

    37/48

    Create AOP Definitions File

    Location classpath:/coreservletsAopContext.xml

    < eans xm ns=" ttp: www.spr ng ramewor .org sc ema eans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:aop="http://www.springframework.org/schema/aop"

    xsi:schemaLocation="htt : www.s rin framework.or schema beans

    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

    http://www.springframework.org/schema/aop

    http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

    Java EE trainin : htt ://courses.coreservlets.com

    Register Advisor Beans

    Java EE trainin : htt ://courses.coreservlets.com75

  • 7/31/2019 07 Spring Aop1

    38/48

    Define Pointcuts

    Execution PCD expression Package namespace

    Class wildcard

    Does not match on sub-packages

    PCD expression keyword

    Java EE trainin : htt ://courses.coreservlets.com76

    Define Aspects

    Advisor

    reference

    Pointcut

    reference

    Java EE trainin : htt ://courses.coreservlets.com

    77

  • 7/31/2019 07 Spring Aop1

    39/48

    Initialize Spring IoC Container

    import org.springframework.context.support.*;

    public class Main {

    public static void main(String[]args) {

    BeanFactory beanFactory =

    new ClassPathXmlApplicationContext(

    "/coreservletsContext.xml",

    " ".

    ...

    }

    }

    Java EE trainin : htt ://courses.coreservlets.com

    Access and Use Beansimport org.springframework.context.support.*;

    ublic class Main

    public static void main(String[]args) {

    BeanFactory beanFactory =

    new ClassPathXmlApplicationContext(new String[]{

    "/coreservletsContext.xml",

    "/coreservletsAopContext.xml"});

    CustomerQuery query =

    " ".

    Customer customer = query.getCustomerByName("Java Joe");

    }

    }

    Standard output

    >>> public java.lang.String coreservlets.Customer.getName().

    args=[]. exit=return[Java Joe]

    >>> public java.lang.String coreservlets.Customer.toString().

    args=[]. exit=return[Customer id=jjoe, name=Java Joe]

    Java EE trainin : htt ://courses.coreservlets.com

    >>> public abstract coreservlets.Customer

    coreservlets.CustomerQuery.getCustomerByName(java.lang.String).

    args=[Java Joe]. exit=return[Customer id=jjoe, name=Java Joe]

  • 7/31/2019 07 Spring Aop1

    40/48

    More Within PCD Examples

    Fully-qualified classname on gura on s oun o e mp emen a on ype

    - y Quietly fails to match

    Interface-type Name must be within the coreservlets package and include the term

    CustomerQuery

    Java EE trainin : htt ://courses.coreservlets.com80

    More Within PCD Examples

    General package name pattern a c es on y on e mme a e mem ers o e coreserv e spac age

    What's the point?

    Java EE trainin : htt ://courses.coreservlets.com81

  • 7/31/2019 07 Spring Aop1

    41/48

    2008 coreservlets.com

    Target PCD

    Customized Java EE Training: http://courses.coreservlets.com/Servlets, JSP, Struts, JSF/MyFaces/Facelets, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6.

    Developed and taught by well-known author and developer. At public venues or onsite at your location.

    Target PCD Details

    PCD Expression

    Expression elements Enclosing package and class name pattern

    xpress on examp e target(coreservlets.CustomerQuery)

    Match target Matches on the instantiated/concrete bean type

    Matches on target bean supertypes

    Does not match on method signature elements

    Pattern support NONE

    Wildcards will generate errors

    Java EE trainin : htt ://courses.coreservlets.com83

  • 7/31/2019 07 Spring Aop1

    42/48

    Target PCD Guidelines

    Assists s av ng we - e ne nter ace types

    Many concrete POJOs implementing marker interfaces Hinders Concrete types sharing no general interfaces

    Java EE trainin : htt ://courses.coreservlets.com84

    Execution PCD Process

    classpath:/coreservletsContext.xml

    - >

    = =

    Java EE trainin : htt ://courses.coreservlets.com

  • 7/31/2019 07 Spring Aop1

    43/48

    Select Join Points

    General coreservlets.CustomerQueryimplementors and methods

    package coreservlets;

    public interface CustomerQuery {

    public Customer getCustomerByName(String name);

    }

    Java EE trainin : htt ://courses.coreservlets.com86

    Create Adviceimport org.aopalliance.intercept.*

    public class SummarizingMethodAdvice

    implements MethodInterceptor {

    public Object invoke(MethodInvocation inv)

    throws Throwable {

    ...return inv.proceed();

    ...

    }

    }

    Java EE trainin : htt ://courses.coreservlets.com87

  • 7/31/2019 07 Spring Aop1

    44/48

    Create Advice Continued

    public Object invoke(MethodInvocation inv) throws Throwable {

    Strin buffer = inv. etMethod().toGenericStrin ()

    + ". args=" + Arrays.toString(inv.getArguments());

    try{Object returnValue = inv.proceed();

    buffer += ". exit=return[" + returnValue + "]";

    return returnValue;

    }

    buffer += " - exit=error[" + t + "]";

    throw t;

    }

    finally{

    Logger log = Logger.getLogger(inv.getThis().getClass());

    log.debug(">>>" + buffer);

    Java EE trainin : htt ://courses.coreservlets.com

    }

    88

    Create AOP Definitions File

    Location classpath:/coreservletsAopContext.xml

    < eans xm ns=" ttp: www.spr ng ramewor .org sc ema eans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:aop="http://www.springframework.org/schema/aop"

    xsi:schemaLocation="htt : www.s rin framework.or schema beans

    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

    http://www.springframework.org/schema/aop

    http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

    Java EE trainin : htt ://courses.coreservlets.com

  • 7/31/2019 07 Spring Aop1

    45/48

    Define Pointcuts

    Execution PCD expression

    > Fully-qualified interface typePCD expression keyword

    Java EE trainin : htt ://courses.coreservlets.com90

    Define Aspects

    Advisor

    reference

    Pointcut

    reference

  • 7/31/2019 07 Spring Aop1

    46/48

    Initialize Spring IoC Container

    import org.springframework.context.support.*;

    public class Main {

    public static void main(String[]args) {

    BeanFactory beanFactory =

    new ClassPathXmlApplicationContext(

    "/coreservletsContext.xml",

    " ".

    ...

    }

    }

    Java EE trainin : htt ://courses.coreservlets.com

    Access and Use Beansimport org.springframework.context.support.*;

    ublic class Main

    public static void main(String[]args) {

    BeanFactory beanFactory =

    new ClassPathXmlApplicationContext(new String[]{

    "/coreservletsContext.xml",

    "/coreservletsAopContext.xml"});

    CustomerQuery query =

    (CustomerQuery) beanFactory.getBean("customerQuery");

    Customer customer = query.getCustomerByName("Java Joe");

    }

    } Standard output

    Java EE trainin : htt ://courses.coreservlets.com

    oc us omer uery pu c a s rac coreserv e s. us omer

    coreservlets.CustomerQuery.getCustomerByName(java.lang.String).

    args=[Java Joe]. exit=return[Customer id=jjoe, name=Java Joe]

  • 7/31/2019 07 Spring Aop1

    47/48

    More Target PCD Examples

    Concrete type on gura on s oun o a par cu ar concre e ype

    u y y

    Java EE trainin : htt ://courses.coreservlets.com94

    2008 coreservlets.com

    Wrap-up

    Customized Java EE Training: http://courses.coreservlets.com/Servlets, JSP, Struts, JSF/MyFaces/Facelets, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6.

    Developed and taught by well-known author and developer. At public venues or onsite at your location.

  • 7/31/2019 07 Spring Aop1

    48/48

    Summary

    Manage AOP code and definitions separately

    Create advice e.g., implement org.aopalliance.intercept.MethodInterceptor

    rea e e n ons e Create file classpath:/coreservletsAopContext.xml

    Registerspring-aop NS

    Register advice beans

    Create pointcut definitions Identifty join points

    Define as ects

    Java EE trainin : htt ://courses.coreservlets.com

    Merge AOP code and definitions with domain productsat runtime96

    2008 coreservlets.com

    ues ons