- 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; } }