Simple Spring Proxy
Posted: November 23rd, 2009 | Author: Edu | Filed under: Design Patterns, Java, Spring | Tags: Design Patterns, Java, Spring | No Comments »Simply a code I wrote today at my Spring Training / Simplemente un código que escribí hoy en el curso de Spring.
applicationContext.xml:
1 2 3 4 5 6 7 8 9 10 | <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="postProcessor" class="com.sourcerebels.test.postprocessor.PostProcessor"/> <bean id="someBusinessRule" class="com.sourcerebels.test.postprocessor.SomeBusinessRule" lazy-init="true"> <property name="message" value="someBusinessRule executed"/> </bean> </beans> |
Advice:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package com.sourcerebels.test.postprocessor; import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; import org.springframework.aop.MethodBeforeAdvice; public class TransactionAdvice implements MethodBeforeAdvice, AfterReturningAdvice { public void before(Method method, Object[] args, Object target) throws Throwable { System.out.println("Starting Transaction"); } public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable { System.out.println("Commit Transaction"); } } |
BusinessRule interface:
1 2 3 4 5 6 | package com.sourcerebels.test.postprocessor; public interface BusinessRule { void run(); } |
SomeBusinessRule class:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package com.sourcerebels.test.postprocessor; public class SomeBusinessRule implements BusinessRule { private String message; public void run() { System.out.println(message); } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } } |
Postprocessor:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package com.sourcerebels.test.postprocessor; import org.springframework.aop.framework.ProxyFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; /** * @author edu@sourcerebels.com */ public class PostProcessor implements BeanPostProcessor { public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("postProcessBeforeInitialization"); return bean; } public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("postProcessAfterInitialization"); if (bean instanceof BusinessRule) { System.out.println("building proxy object"); ProxyFactory proxyFactory = new ProxyFactory(bean); proxyFactory.addInterface(BusinessRule.class); proxyFactory.addAdvice(new TransactionAdvice()); return proxyFactory.getProxy(); } return bean; } } |
Main:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package com.sourcerebels.test.postprocessor; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) { String[] paths = { "com/sourcerebels/test/postprocessor/applicationContext.xml" }; ApplicationContext ctx = new ClassPathXmlApplicationContext(paths); BusinessRule negocio = (BusinessRule) ctx.getBean("someBusinessRule"); negocio.run(); negocio = (BusinessRule) ctx.getBean("someOtherBusinessRule"); negocio.run(); } } |
Leave a Reply