---恢复内容开始---
1、AOP的主要作用及概念简介
AOP最大的用处在于事务处理上,业务层在项目中主要负责以下的操作:
·调用数据层进行处理;
·进行事务的处理;
·关闭数据库的连接操作;
但在实际操作中,往往还要进行日志处理,事务提交等等辅助性操作,此时aop就派上用场。一个优秀的代理模式是将不同的切入点代码单独定义,而后组织在一个程序网上。AOP就在spring中充当了这样一个角色。
AOP有以下几个概念:
·切入点:可以理解为所有要操作的方法定义。要求业务层的方法必须统一风格。
·分离点:将那些不可再分的组件单独提取出去定义为单独的操作功能;
·横切关注点:将所有与开发无关的程序组成类单独提取而后组织运行;
·植入:将所有的切入点、关注点的代码组成在一张完整的程序结构中。
在Spring中采用通知的形式完成,即当触发到了某些操作之后自然地进行一些固定的操作。在整个SpringAOP中包含有以下几类通知形式:
·前置通知:在某一操作执行之前处理。
·后置通知:在某一操作执行之后处理,但后置通知有以下几种子通知:
|-后置返回通知:负责处理返回结果的时候进行拦截;
|-后置异常通知:当出现异常后进行拦截;
|-后置最终通知:执行到最后无论如何都会进行拦截;
·环绕通知:具有以上通知到特点。(功能最强大)
2、AOP的简单练习
(1)简单地构建Spring环境
1??、定义IMemberService.java:
1 package cn.ckw.IService; 2 3 import cn.ckw.vo.Member; 4 5 public interface IMemberService { 6 boolean insert(Member vo); 7 }
2??、定义Membe.java
1 package cn.ckw.vo; 2 3 public class Member { 4 private String name; 5 private String id; 6 public String getName() { 7 return name; 8 } 9 public void setName(String name) { 10 this.name = name; 11 } 12 public String getId() { 13 return id; 14 } 15 public void setId(String id) { 16 this.id = id; 17 } 18 @Override 19 public String toString() { 20 return "Member [name=" + name + ", id=" + id + "]"; 21 } 22 23 }
3??、定义MemberServiceImpl.java
1 package cn.ckw.serviceImpl; 2 3 import org.springframework.stereotype.Service; 4 5 import cn.ckw.IService.IMemberService; 6 import cn.ckw.vo.Member; 7 @Service 8 public class MemberServiceImpl implements IMemberService{ 9 @Override 10 public boolean insert(Member vo) { 11 //throw new NullPointerException("this is a exception"); 12 System.out.println("这是业务层的调用"); 13 return true; 14 } 15 16 }
以上模拟了业务实现,随后要加入的辅助性操作,都是通过Spring容器的配置完成。
首先要在application.xml.文件中加入annotation支持,加入时不要忘记检查命名空间是否已经被引入:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:aop="http://www.springframework.org/schema/aop" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 8 http://www.springframework.org/schema/context 9 http://www.springframework.org/schema/context/spring-context-2.5.xsd 10 http://www.springframework.org/schema/aop 11 http://www.springframework.org/schema/aop/spring-aop-4.1.xsd"> 12 <context:annotation-config /> 13 <context:component-scan base-package="cn.ckw" /> 14 <aop:config> 15 <aop:pointcut expression="execution(* cn.ckw..*.*(..)) and args(vo)" 16 id="pointcut" /> 17 <aop:aspect ref="serviceAspect"> 18 <aop:before method="serviceBefore2" pointcut-ref="pointcut" 19 arg-names="vo" /> 20 <aop:after method="serviceAfter" pointcut="execution(* cn.ckw..*.*(..))" /> 21 <aop:after-returning method="serviceAfterReturning" 22 pointcut="execution(* cn.ckw..*.*(..))" returning="ret" arg-names="ret" /> 23 </aop:aspect> 24 </aop:config> 25 </beans>
---恢复内容结束---
原文:http://www.cnblogs.com/chenkaiwei/p/6416661.html