Topics

● Why AOP?
● AOP concepts
● Spring AOP


What is AOP?

Why AOP?
● Aspect-oriented programming (AOP) provides for simplified application of cross-cutting concerns
● Examples of cross-cutting concerns
– Logging
– Transaction management
– Security
– Auditing
– Locking

– Event handling

AOP Concepts

AOP Concepts: Joinpoint

● Well-defined point during the execution of your application
● You can insert additional logic at Joinpoint's
● Examples of Jointpoint's
– Method invocation
– Class initialization

– Object initialization

AOP Concepts: Advice

● The code that is executed at a particular joinpoint
● Types of Advice
– before advice, which executes before joinpoint
– after advice, which executes after joinpoint

– around advice, which executes around joinpoint

AOP Concepts: Pointcuts

● A collection of joinpoints that you use to define when advice should be executed
● By creating pointcuts, you gain fine-grained control over how you apply advice to the
components
● Example
– A typical joinpoint is a method invocation.
– A typical pointcut is a collection of all method invocations in a particular class
● Pointcuts can be composed in complex relationships to further constrain when advice is

executed

AOP Concepts: Aspects

● An aspect is the combination of advice and pointcuts

AOP Concepts: Weaving

● Process of actually inserting aspects into the application code at the appropriate point
● Types of Weaving
– Compile time weaving

– Runtime weaving

AOP Concepts: Target

● An object whose execution flow is modified by some AOP process

● They are sometimes called advised object


AOP Concepts: Introduction

● Process by which you can modify the structure of an object by introducing additional methods or fields to it
● You use the Introduction to make any object implement a specific interface without needing the object's class to implement that interface explicitly

Types of AOP

● Static AOP
– The weaving process forms another step in the build process for an application
– Example: In Java program, you can achieve the weaving process by modifying the actual bytecode of the application changing and modifying code as necessary
● Dynamic AOP
– The weaving process is performed dynamically at runtime
– Easy to change the weaving process without recompilation


Spring AOP

● Based on proxies
– When you want to create an advised instance of a class, you must use the ProxyFactory class to create a proxy of an instance of that class, first providing the ProxyFactory with all the aspects that you want to be woven into the proxy
– You typically use ProxyFactoryBean class to provide declarative proxy creation


HelloWorld Spring AOP

MessageWriter Class

● We want to display “Hello World !” through AOP

public class MessageWriter implements IMessageWriter{
public void writeMessage() {
System.out.print("World");
}

}

Target

● The joinpoint is the invocation of the writeMessage() method
● What we need is an “around advice”

public class MessageWriter implements IMessageWriter{
public void writeMessage() {
System.out.print("World");
}

}

Around Advice

● MethodInterceptor is AOP Alliance standard interface for around interface
● MethodInvocation object represents the method invocation that is being advised

public class MessageDecorator implements MethodInterceptor {
public Object invoke(MethodInvocation invocation)
throws Throwable {
System.out.print("Hello ");
Object retVal = invocation.proceed();
System.out.println("!");
return retVal;

}

Weaving MessageDecorator Advice

● Use ProxyFactory class to create the proxy of the target object

public static void main(String[] args) {
MessageWriter target = new MessageWriter();
// create the proxy
ProxyFactory pf = new ProxyFactory();
//Add the given AOP Alliance advice to the tail
//of the advice (interceptor) chain

pf.addAdvice(new MessageDecorator());
//Set the given object as target
pf.setTarget(target);
//Create a new proxy according to the
//settings in this factory
MessageWriter proxy = (MessageWriter) pf.getProxy();
// write the messages
target.writeMessage();
System.out.println("");
// use the proxy
proxy.writeMessage();
}

}

Leave a Reply

Subscribe to Posts | Subscribe to Comments

About This Site

Howdy! My name is Suersh Rohan and I am the developer and maintainer of this blog. It mainly consists of my thoughts and opinions on the technologies I learn,use and develop with.

Blog Archive

Powered by Blogger.

- Copyright © My Code Snapshots -Metrominimalist- Powered by Blogger - Designed by Suresh Rohan -