1,定义Around处理
package cn.hunnu.aop.autoproxy;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
/**
* Around 处理
* @author 肖波
*
*/
public class ServiceDAOInterceptor implements MethodInterceptor
{
@Override
public 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
{
@Override
public void query()
{
System.out.println("query(): query data from database...");
}
}
package cn.hunnu.aop.autoproxy;
public class TestService implements ITestService
{
private ITestDAO dao;
@Override
public 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 class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <!-- generate proxy dynamically for these beans which match the follow beanNames --> <property name="beanNames"> <!-- target bean will be wrapped --> <value>*DAO,*Service</value> </property> <property name="interceptorNames"> <value>ServiceDAOInterceptor</value> </property> </bean> <bean id="ServiceDAOInterceptor" class="cn.hunnu.aop.autoproxy.ServiceDAOInterceptor"> </bean> <bean id="TestDAO" class="cn.hunnu.aop.autoproxy.TestDAO"></bean> <bean id="TestService" class="cn.hunnu.aop.autoproxy.TestService"> <property name="dao"> <ref local="TestDAO"/> </property> </bean> </beans>
4,测试类
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:query
query(): query data from database...
after executed method:query
before execute method:service
service(): call service to execute business logic...
before execute method:query
query(): query data from database...
after executed method:query
after executed method:service