Home » Java » Enterprise Java » Email filtering using Aspect and Spring Profile

About Gal Levinsky

Gal Levinsky
Graduated B.s.c Information System Engineering on BGU University (2004). Been working on large cloud based ERP application in SAP for 7 years and as a development group manager in affiliation company. Co-founded few startups in the domain of social web.

Email filtering using Aspect and Spring Profile

During web application development, often the need for sending emails arise.

However, sometimes the database is populated by data from production and there is a risk of sending emails to real customers during email test execution.

This post will explain how to avoid it without explicitly write code in the send email function.

We would use 2 techniques:

  1. Spring Profiles – a mechanism to indicate what the running environment is (i.e. development, production,..)
  2. AOP – in simplified words its a mechanism to write additional logic on methods in decoupled way.

I would assume you already have Profiles set on your projects and focus on the Aspect side.

In that example the class which sends emails is EmailSender with the method send, as specified below:

public class EmailSender {
//empty default constructor is a must due to AOP limitation
public EmailSender() {}

//Sending email function
//EmailEntity - object which contains all data required for email sending (from, to, subject,..)
public void send(EmailEntity emailEntity) {
//logic to send email

Now, we will add the logic which prevent sending email to customers where code is not running on production.
For this we will use Aspects so we won’t have to write it in the send method and by that we would maintain the separation of concern principle.

Create a class that will contain the filtering method:

public class EmailFilterAspect {

public EmailFilterAspect() {}

Then create a PointCut for catching the send method execution:

@Pointcut("execution(public void com.mycompany.util.EmailSender.send(..))")
 public void sendEmail(){}

Since we need to control whether the method should be executed or not, we need to use the Arround annotation.

public void emailFilterAdvice(ProceedingJoinPoint proceedingJoinPoint){
 try {
  proceedingJoinPoint.proceed(); //The send email method execution
 } catch (Throwable e) {                           

As a last point, we need to access the send method input parameter (i.e. get the EmailEntity) and verify we don’t send emails to customers on development.

 public void emailFilterAdvice(ProceedingJoinPoint proceedingJoinPoint){

 //Get current profile
ProfileEnum profile = ApplicationContextProvider.getActiveProfile();

Object[] args = proceedingJoinPoint.getArgs();        //get input parameters
        if (profile != ProfileEnum.PRODUCTION){
            //verify only internal mails are allowed
            for (Object object : args) {
                if (object instanceof EmailEntity){
                    String to = ((EmailEntity)object).getTo();
                    if (to!=null && to.endsWith("@mycompany.com")){//If not internal mail - Dont' continue the method                        
                        try {
                        } catch (Throwable e) {
            //In production don't restrict emails
            try {
            } catch (Throwable e) {

That’s it.
Regarding configuration, you need to include the aspect jars in your project.
In Maven it’s look like this:


and in your spring application configuration xml file, you need to have this:

Good luck!

Reference: Email filtering using Aspect and Spring Profile from our JCG partner Gal Levinsky at the Gal Levinsky’s blog blog.

(0 rating, 0 votes)
You need to be a registered member to rate this.
Start the discussion Views Tweet it!
Do you want to know how to develop your skillset to become a Java Rockstar?
Subscribe to our newsletter to start Rocking right now!
To get you started we give you our best selling eBooks for FREE!
1. JPA Mini Book
2. JVM Troubleshooting Guide
3. JUnit Tutorial for Unit Testing
4. Java Annotations Tutorial
5. Java Interview Questions
6. Spring Interview Questions
7. Android UI Design
and many more ....
Email address:

Leave a Reply

Be the First to Comment!

Notify of