Spring自动代理-BeanNameAutoProxyCreator
1,定义Around处理
package cn.hunnu.aop.autoproxy;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;/** * Around 处理 * @author 肖波 * */public class ServiceDAOInterceptor implements MethodInterceptor{@Overridepublic Object invoke(MethodInvocation invocation) throws Throwable{String methodName = invocation.getMethod().getName();System.out.println("before execute method:"+methodName);Object result = invocation.proceed();System.out.println("after executed method:"+methodName);return result;}}?
2,DAO、Service
package cn.hunnu.aop.autoproxy;public interface ITestDAO{public void query();}?
package cn.hunnu.aop.autoproxy;public interface ITestService{public void service();}?
package cn.hunnu.aop.autoproxy;public class TestDAO implements ITestDAO{@Overridepublic void query(){System.out.println("query(): query data from database...");}}?
package cn.hunnu.aop.autoproxy;public class TestService implements ITestService{private ITestDAO dao;@Overridepublic void service(){System.out.println("service(): call service to execute business logic...");dao.query();}public ITestDAO getDao(){return dao;}public void setDao(ITestDAO dao){this.dao = dao;}}?
3,上下文配置applicationContext.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:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <!-- BeanPostProcessor --><bean name="code">package cn.hunnu.aop.autoproxy;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Main{public static void main(String args[]){//ApplicationContext ctx = new FileSystemXmlApplicationContext("src/applicationContext.xml");ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");ITestDAO dao = (ITestDAO)ctx.getBean("TestDAO");ITestService service = (ITestService)ctx.getBean("TestService");dao.query();service.service();}}?
5,运行结果
before execute method:queryquery(): query data from database...after executed method:querybefore execute method:serviceservice(): call service to execute business logic...before execute method:queryquery(): query data from database...after executed method:queryafter executed method:service
?