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
本文介绍了一个使用Spring AOP实现的简单示例,通过自定义拦截器实现了对DAO和服务层方法调用前后的操作增强。
124

被折叠的 条评论
为什么被折叠?



