Sunday, October 14, 2012

Spring AOP Tutorial

Here I am going you to demonstrate a Spring AOP with the help of AspectJ,for that you need to create a java project in Eclipse and add the spring library apart from spring jar we need to have aspect jars in my class path for that reason I have created a AspectJ library and included the jars in the lib as shown in the figure.





















Step 2: Create Model class Mp3Player Class and the Tuner class as created here

package com.rajkrrsinghblogspot.model;

public class Mp3Player {
 
 private String mp3PlayerName;

 public String getMp3PlayerName() {
  return mp3PlayerName;
 }

 public void setMp3PlayerName(String mp3PlayerName) {
  this.mp3PlayerName = mp3PlayerName;
 }

}


Tuner.java

package com.rajkrrsinghblogspot.model;

public class Tuner {
 
 private String tunerName;

 public String getTunerName() {
  return tunerName;
 }

 public void setTunerName(String tunerName) {
  this.tunerName = tunerName;
 }

}


Step 2: Create the MusicService class as fallows:
package com.rajkrrsingh.blogspot.service;

import com.rajkrrsinghblogspot.model.Mp3Player;
import com.rajkrrsinghblogspot.model.Tuner;


public class MusicService {
 
 private Mp3Player mp3Player;
 private Tuner myTuner;
 
 public Mp3Player getMp3Player() {
  return mp3Player;
 }
 public void setMp3Player(Mp3Player mp3Player) {
  this.mp3Player = mp3Player;
 }
 public Tuner getMyTuner() {
  return myTuner;
 }
 public void setMyTuner(Tuner myTuner) {
  this.myTuner = myTuner;
 }
 
 
}


Step 3:Now create Aspect which are the focal point of the tutorial,in my case I am going to create a logging aspect as fallows in which I used annotation @Aspect to know the application that I am writing this class as Aspect,the @Before and @After annotation are used with my advice loggingAdvice and anothetLoggingAdvice these advice will run when the getMp3PlayerName() method will execute.look at the configuration that are self explanatory as well
package com.rajkrrsinghblogspot.aspect;
 
 import org.aspectj.lang.annotation.After;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
 
 @Aspect
 public class MyLoggingAspect {
  
  @Before("execution(public String getMp3PlayerName())")
  public void loggingAdvice(){
   System.out.println("Advice : Before the extecution of the getMp3PlayerName Method");
  }
  
  @After("execution(public String getMp3PlayerName())")
  public void anothetLoggingAdvice(){
   System.out.println("Advice : After the extecution of the getMp3PlayerName Method");
  }
 
 }


Step 4: Create spring.xml in the src folder to configure all the beans in the application as shown
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
 xmlns:context="http://www.springframework.org/schema/context">

 <aop:aspectj-autoproxy/>
 
 <bean id="mp3ply" class="com.rajkrrsinghblogspot.model.Mp3Player">
  <property name="mp3PlayerName" value="Sony Mp3Player"/>
 </bean>
 
 <bean id="tuner" class="com.rajkrrsinghblogspot.model.Tuner">
  <property name="tunerName" value="Philipse"/>
 </bean>
 
 <bean id="musicService" class="com.rajkrrsingh.blogspot.service.MusicService" >
  <property name="mp3Player" ref="mp3ply"/>
  <property name="myTuner" ref="tuner"/>
 </bean>

 <bean id="myLogginAspect" class="com.rajkrrsinghblogspot.aspect.MyLoggingAspect" />
</beans>


Step 5: Now create Main class to test this out
package com.rajkrrsinghblogspot.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.rajkrrsingh.blogspot.service.MusicService;

public class Main {

 /**
  * @param args
  */
 public static void main(String[] args) {
  //BeanFactory factory = new XmlBeanFactory(new FileSystemResource("spring.xml"));
  
  ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
  MusicService ms = (MusicService) ctx.getBean("musicService");
  System.out.println(ms.getMp3Player().getMp3PlayerName());

 }

}


Step 6: we are all set now,run the main class:






No comments: