首页 > 其他 > 详细

AOP的简单练习

时间:2017-02-19 19:58:02      阅读:172      评论:0      收藏:0      [点我收藏+]

---恢复内容开始---

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 }
IMemberService.java

    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 }
Member

 

    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 }
MemberServiceImpl

 

    以上模拟了业务实现,随后要加入的辅助性操作,都是通过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>

 

 

 

 

---恢复内容结束---

AOP的简单练习

原文:http://www.cnblogs.com/chenkaiwei/p/6416661.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!