Pointcut
In
Background
Due to limitations in various programming languages, cross-cutting concern has not modularized. Cross-cutting concern refers to parts of software that logically belong to one module and affect the whole system: this could be security or logging, for example.[2] Aspect-oriented programming tries to solve these cross cutting concerns by allowing programmers to write modules called aspects, which contain pieces of code executed at particular point. The expressions required to select a particular point led to creation of Pointcut Expressions.
Execution
Whenever the program execution reaches one of the join points described in the pointcut, a piece of code associated with the pointcut (called advice) is executed. This allows a programmer to describe where and when additional code should be executed in addition to already-defined behavior. Pointcut permits the addition of aspects to existing software, as well as the design of software with a clear separation of concerns, wherein the programmer weaves (merges) different aspects into a complete application.
Example
Suppose there is an application where we can modify records in a database. Whenever users modify the database, we want to have a log of information regarding who is modifying the records. The traditional way to log is to call a log method just before modifying the database. With aspect-oriented programming, we can apply pointcut to the Modify Database method and have an advice that is called to log the required information.[3]
Expressions
Following are some important pointcut expressions supported by AspectJ. These expressions can be combined using logical operators.[4]
execution(void User.setPassword(password))
This pointcut matches execution of the User.setPassword method.
call(void User.getPassword())
When User.getPassword is called, this pointcut is matched.
handler(ArrayIndexOutOfBounds)
Pointcut will match when there is an ArrayIndexOutOfBounds exception
this(UserType)
Pointcut will match when the object currently executing is of UserType.
target(UserType)
Pointcut will match when the target object is of UserType.
within(UserType)
Pointcut will match when the code executing belongs to UserType.
Criticisms
Pointcut languages impact important software properties like
References
- ^ "A Classification of Pointcut Language Constructs" (PDF). Retrieved 29 December 2019.
- ^ "Introduction to AspectJ". Retrieved 14 September 2016.
- ^ "JBoss AOP - User Guide". docs.jboss.org. Retrieved 2016-09-14.
- ^ "Join Points and Pointcuts". Retrieved 14 September 2016.
- ^ CiteSeerX 10.1.1.2.594.
External links
- Paper "Back to the Future: Pointcuts as Predicates over Traces" by Karl Klose and Klaus Ostermann
- Paper "Remote Pointcut - A Language Construct for Distributed AOP" by Muga Nishizawa, Shigeru Chiba and Michiaki Tatsubori
- Paper "Datalog as a Pointcut Language in Aspect-Oriented Programming"
- Paper "Expressiveness and Complexity of Crosscut Languages" by Karl J. Lieberherr, Jeffrey Palm and Ravi Sundaram