读书人

Spring AOP概念学习(3)-自动代理

发布时间: 2012-11-09 10:18:48 作者: rapoo

Spring AOP概念学习(三)-自动代理

上一篇文章是Spring AOP的单独代理,这一篇是关于Spring AOP的自动代理。其中的原理没必要多说,Spring AOP可以通过两种方式实现自动代理。下面就是分别介绍这两种方式。

1、使用BeanNameAutoProxyCreator

1)首先创建Bean类

package com.javaeye.sunjiesh.proxy.auto;public class HelloBeanA {public void testHelloBeanA(){System.out.println(this.getClass().getName()+" is running");}}

package com.javaeye.sunjiesh.proxy.auto;public class HelloBeanB {public void testHelloBeanB(){System.out.println(this.getClass().getName()+" is running");}}

2)创建Advice类

package com.javaeye.sunjiesh.aop;import java.lang.reflect.Method;import org.springframework.aop.AfterReturningAdvice;public class AfterAdviceBean implements AfterReturningAdvice{public AfterAdviceBean() {// TODO Auto-generated constructor stub}@Overridepublic void afterReturning(Object returnValue, Method method,Object[] args, Object target) throws Throwable {// TODO Auto-generated method stubSystem.out.println("afterReturning is running");}}

package com.javaeye.sunjiesh.aop;import java.lang.reflect.Method;import org.springframework.aop.MethodBeforeAdvice;public class BeforeAdviceBean implements MethodBeforeAdvice{public BeforeAdviceBean() {// TODO Auto-generated constructor stub}@Overridepublic void before(Method method, Object[] args, Object target)throws Throwable {// TODO Auto-generated method stubSystem.out.println("before is running");}}

3)创建xml配置文件

<?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:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><bean id="helloBeanA" name="code">package com.javaeye.sunjiesh.proxy.auto;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringAopMain {public SpringAopMain() {// TODO Auto-generated constructor stub}/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubApplicationContext ctx = new ClassPathXmlApplicationContext("spring-beans3.xml");HelloBeanA h1 = (HelloBeanA) ctx.getBean("helloBeanA");h1.testHelloBeanA();HelloBeanB h2 = (HelloBeanB) ctx.getBean("helloBeanB");h2.testHelloBeanB();}}

5)输出

before is runningcom.javaeye.sunjiesh.proxy.auto.HelloBeanA is runningafterReturning is runningbefore is runningcom.javaeye.sunjiesh.proxy.auto.HelloBeanB is runningafterReturning is running

2、使用DefaultAdvisorAutoProxyCreator

只要修改xml配置文件就可以了

<?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:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><bean id="helloBeanA" /><bean id="nameMatchMethodPointcutAdvisor"ref="beforeAdvice" /><property name="mappedNames"><list><value>test*</value></list></property></bean></beans>

读书人网 >软件架构设计

热点推荐