Recommended: Sing it, brah! 5 fabulous songs for developers
JW's Top 5
Optimize with a SATA RAID Storage Solution
Range of capacities as low as $1250 per TB. Ideal if you currently rely on servers/disks/JBODs
Most developers will acknowledge how implementing crosscutting concerns such as logging, auditing, security and transactionality can adversely affect business logic implementation. Such concerns "seem" to increase the complexity of existing business logic, at times making it difficult if not impossible to clearly distinguish business logic from the crosscutting concern implementation.
I had been hearing about aspect-oriented programming (AOP) being a solution for implementing crosscutting concerns. But having read through early AOP tools documentation, I was dissuaded from using AOP in my projects' recommendations, primarily because of a concern that average developers might not "get" AOP concepts, and the overall ability to debug applications, and maintain them, might be restricted to those few who understood AOP.
Recently released Spring 2.0 provides excellent, easy-to-use AOP capabilities. Spring AOP is now remarkably easy to use for the average Java developer with traditional object-oriented programming skills. This story shows how Spring 2.0 AOP can be effectively used to implement crosscutting concerns in a typical software project. We will consider the following crosscutting concerns for implementation:
Let us start with an example code snippet:
public String doSomething(String input)
{
//Logging
System.out.println("entering business method with:"+input);
//Security check for authorization of action (business-method)
//transactionality
try
{
//Start new session and transaction
//Some business logic
//Commit transaction
}
catch(Exception e)
{
//Rollback transaction
}
finally
{
//Close session
}
//Logging
System.out.println("exiting business method with:"+input);
return input;
}
As can be seen, the actual business logic in the business method appears hopelessly lost in the crosscutting concerns code for security, transactionality and logging. My intent is to demonstrate the ability to implement these concerns as cleanly segregated from the business logic as might be possible.
Before we begin, let's review a few basic definitions used in aspect-oriented programming and their implementation in Spring AOP.
execution(* com.myorg.springaop.examples.MyService*.*(..)). Asterisks in the expression refer to wildcards, as is conventional.
Let's try and implement each of the concerns using Spring 2.0 AOP.
For an introduction to AOP, read "I Want My AOP!" Ramnivas Laddad (JavaWorld)
Archived Discussions (Read only)