07 Spring Aop1
-
Upload
abhinavece10 -
Category
Documents
-
view
217 -
download
0
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