这里侧重AOP流程方面理解。
AOP:aspect oriented programming,是对面向对象编程的有益补充。AOP一般适用于具有横切逻辑的场合,如访问控制,事务管理,性能监测等。
Spring AOP案例:
模拟银行业务流程。
主要功能流程:查询、转账、购买
扩展:每一项功能都需要安全检查、功能、日志记录、清楚缓存四步骤。
《查询、转账、购买功能,均以简单的输出语句表示,侧重AOP流程方面解释,未做具体功能的实现。》
业务逻辑(步骤):
//步骤一:
public class Security {//安全检查
public void isSecurity(){
System.out.println(“Security----isSecurity()----环境安全了”);
}
}
//步骤二:主要功能
接口(功能):
public interface BocDao {
void select();//查询
void transfer();//转账
void buy();//购买
}
//接口实现:
//实现查询,以输出简单表示,下同。
public class BocDaoImpl implements BocDao {
public void select(){ //连接点
System.out.println(“BocDaoImpl----select()----查询结果:余额为10亿”);
}
//转账
public void transfer(){
System.out.println(“BocDaoImpl----transfer()----向对方转账2个亿”);
}
//购买
public void buy(){
System.out.println(“BocDaoImpl----buy()----花费5亿购买别墅”);
}
}
//步骤三:
//日志模块
public class Logger {
public void logger(){
System.out.println(“Logger----logger()—日志记录”);
}
}
//步骤四:
//清除缓存
public class ClearCache {
public void clear(){
System.out.println(“ClearCache—clear()----清楚缓存”);
}
}
配置aop的xml
main目录下新建resources后完成加载,并配置beans_aop.xml文件 参考如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop ="http://www.springframework.org/schema/aop"
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.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--AOP
1,目标类
2,通知类
3,切面
-->
<!--目标类-->
<bean id="bocDao" class="com.k9501.b.dao.impl.BocDaoImpl"></bean>
<!--通知类-->
<bean id="security" class="com.k9501.b.security.Security"></bean>
<bean id="log" class="com.k9501.b.logger.Logger"></bean>
<bean id="cc" class="com.k9501.b.cache.ClearCache"></bean>
<!-- 切面-->
<!--AOP-->
< aop:config>
<!--切入点pointcut
id:给切入点取名
expression:切入点表达式,获取切入点 连接点
execution()中*表示返回值任意。在impl包下,bocdaomimpl(*所有)类中的所有方法的任意参数,
都是切入点-->
<aop:pointcut id="pointCut" expression="execution(* com.k9501.b.dao.impl.*.*(..))"></aop:pointcut>
<!--日志-->
<!--后置通知order值越大,越先执行-->
<aop:aspect ref="log" order="2">
<aop:after method="logger" pointcut-ref="pointCut"></aop:after>
</aop:aspect>
<!--缓存-->
<aop:aspect ref="cc" order="1">
<aop:after method="clear" pointcut-ref="pointCut"></aop:after>
</aop:aspect>
</aop:config>
</beans>
最后测试类:(导包省略)
主要代码:
public class BocTest {//AOP动态代理
@Test
public void bocDaoAopTest(){
ApplicationContext applicationContext=
new ClassPathXmlApplicationContext("aop/beans_aop.xml");
BocDao bocDao=(BocDao) applicationContext.getBean("bocDao");
System.out.println("AOP动态代理--测试");
bocDao.select();//调用查询方法
//bocDao.transfer();//调用转账方法
//bocDao.buy();//调用购买方法
//关闭容器
((ClassPathXmlApplicationContext) applicationContext).close();
}
}
以上功能查询、转账、购买功能,均以简单的输出语句表示,侧重AOP流程方面解释,未做具体功能的实现。