- The Way aspect function calls are made are through proxy classes internally
- Internally the Spring framework creates proxy classed and calls to the code generated as per the xml are run in proxy class methods before the actual class are called
- In the below example in DrawingApp.java I try to create a object for the class circle by invoking factoryService getBean Method
- This method returns a Object of class ShapeServiceProxy with the custom methods for xml code added
ShapeService.java
package com.mugil.shapes;
public class ShapeService {
private Circle objCircle;
private Triangle objTriangle;
public Circle getObjCircle() {
return objCircle;
}
public void setObjCircle(Circle objCircle) {
this.objCircle = objCircle;
}
public Triangle getObjTriangle() {
return objTriangle;
}
public void setObjTriangle(Triangle objTriangle) {
this.objTriangle = objTriangle;
}
}
ShapeServiceProxy.java
package com.mugil.shapes;
public class ShapeServiceProxy extends ShapeService {
public Circle getObjCircle() {
new LoggingAspect().getLogMessage();
return super.getObjCircle();
}
}
DrawingApp.java
package com.mugil.shapes;
public class DrawingApp
{
public static void main(String[] args)
{
FactoryService objFactSer = new FactoryService();
ShapeService objSS = (ShapeService)objFactSer.getBean("ShapeService");
objSS.getObjCircle();
}
}
FactoryService.java
package com.mugil.shapes;
public class FactoryService {
public Object getBean(String className)
{
if(className.equals("Circle"))
return new Circle();
else if(className.equals("Triangle"))
return new Triangle();
else if(className.equals("DrawingApp"))
return new DrawingApp();
else if(className.equals("ShapeService"))
return new ShapeServiceProxy();
return null;
}
}
