PRESENTER: In this lecture, you will learn what AOP is.
AOP stands for Aspect-Oriented Programming.
This can be best understood by looking at
an enterprise application which is typically divided into layers:
UI layer, business logic layer,
data access layer, and many more.
All these layers typically have
some non-functional requirements like security, profiling,
logging, transaction management when we are especially using a database or a MQ system.
Logging to write our errors or information to the log files,
profiling to see how our application is performing,
and security, you know what it is for.
These are called cross-cutting concerns because these are required across
these layers as well as across
the applications in our enterprise or even another enterprise.
Any application we develop will need all these and more.
That is where aspects come in and Aspect-Oriented Programming comes in.
In object-oriented world, we define a class
and object is the key unit that are present in that class.
In the aspect-oriented world,
an aspect is the key unit.
You can think of it as a specialized class
that addresses one of these cross-cutting concerns.
It could be security,
profiling, logging, transaction management, etc.
These aspects can be applied to our classes and objects at runtime.
Doing that, will have several advantages.
Number 1, cross-cutting concerns, as I already said.
We can address all the non-functional requirements which are
common across the enterprise or even enterprises,
allowing us to reuse.
Once we develop an aspect,
we can apply it across classes in our application and across applications.
Quick development, we can focus on our business logic without
worrying about the non-functional requirements because we already
have the aspects and we can apply them or we can
create an aspect later on and we can apply it.
Focus on one aspect.
Using this, we can specialize. A particular developer if
he is interested in working on security aspect,
you can develop an aspect for that.
Another developer can work on logging,
transaction management, etc, which will allow specialization.
Finally, a powerful feature is enabling and disabling aspects at runtime.
We can enable them and we can disable them
using configuration if we don't need them anymore.
There are several popular frameworks in the open-source.
Java will do implement Aspect-Oriented Programming.
Spring and aspect here are two popular ones.
Spring also works together with
AspectJ and it has its own implementation of aspects as well.