Aspects Oriented Programming(AOP) in Spring:-
Aspect-Oriented Programming (AOP) complements Object-Oriented Programming (OOP) by providing another way of thinking about program structure. The key unit of modularity in OOP is the class, whereas in AOP the unit of modularity is the aspect. Aspects enable the modularization of concerns such as transaction management that cut across multiple types and objects.
Aspect-oriented programming breaking down program logic into
distinct parts (so-called concerns, cohesive areas of functionality). All
programming paradigms support some level of grouping and encapsulation of
concerns into separate, independent entities by providing abstractions (e.g.,
procedures, modules, classes, methods) that can be used for implementing,
abstracting, and composing these concerns.
A cross-cutting concern is a concern that can affect the whole application and should be centralized in one location in code as possible, such as transaction management, authentication, logging, security etc.
AOP Concepts and Terminology:-
1 Aspect: A modularization of a concern that cuts across multiple objects. Transaction management is a good example of a crosscutting concern in J2EE applications. In Spring AOP, aspects are implemented using regular classes (the schema-based approach) or regular classes annotated with the @Aspect annotation (@AspectJ style).
2 Join point: A point during the execution of a program, such as the execution of a method or the handling of an exception. In Spring AOP, a join point always represents a method execution. Join point information is available in advice bodies by declaring a parameter of type org.aspectj.lang.JoinPoint.
3 Advice: Action taken by an aspect at a particular join point. Different types of advice include "around," "before" and "after" advice. Advice types are discussed below. Many AOP frameworks, including Spring, model an advice as an interceptor, maintaining a chain of interceptors "around" the join point.
4 Pointcut: A predicate that matches join points. Advice is associated with a pointcut expression and runs at any join point matched by the pointcut (for example, the execution of a method with a certain name). The concept of join points as matched by pointcut expressions is central to AOP: Spring uses the AspectJ pointcut language by default.
5 Introduction: (Also known as an inter-type declaration). Declaring additional methods or fields on behalf of a type. Spring AOP allows you to introduce new interfaces (and a corresponding implementation) to any proxied object. For example, you could use an introduction to make a bean implement an IsModified interface, to simplify caching.
6 Target object: Object being advised by one or more aspects. Also referred to as the advised object. Since Spring AOP is implemented using runtime proxies, this object will always be a proxied object.
7 AOP proxy: An object created by the AOP framework in order to implement the aspect contracts (advise method executions and so on). In the Spring Framework, an AOP proxy will be a JDK dynamic proxy or a CGLIB proxy. Proxy creation is transparent to users of the schema-based and @AspectJ styles of aspect declaration introduced in Spring 2.0.
8 Weaving: Linking aspects with other application types
or objects to create an advised object. This can be done at compile time (using
the AspectJ compiler, for example), load time, or at runtime. Spring AOP, like
other pure Java AOP frameworks, performs weaving at runtime.
Types of advice: Spring aspects can work with five kinds of advice as follow-
1 before Run advice before the a method execution.
2 after Run advice after the a method execution regardless of its outcome.
3 after-returning Run advice after the a method execution only if method completes successfully.
4 after-throwing Run advice after the a method execution only if method exits by throwing an exception.
5 around Run advice before and after the advised method is invoked.
AOP implementations are provided by:
2 Spring AOP
3 JBoss AOP
Spring supports the @AspectJ annotation style approach and the schema-based approach to implement custom aspects.
1 XML Schema based Aspects are implemented using regular classes along with XML based configuration.
2 @AspectJ based @AspectJ refers to a style of declaring aspects as regular Java classes annotated with Java 5 annotations.