码迷,mamicode.com
首页 > 编程语言 > 详细

Spring AOP的实际应用

时间:2015-03-31 20:17:59      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:spring aop

      首先,尽管咱们这里不乏技术牛人,但是为了照顾刚接触JAVA没多久的童鞋,我先来普及Spring AOP是什么。

 

       AOP其实是对OOP思想的补充和完善。我想大家对OOP都不会陌生,OOP引入"抽象"、"封装"、"继承"、"多态"等概念,对万事万物进行抽象和封装,来建立一种对象的层次结构。它强调了一种完整事物的自上而下的关系。但是具体细粒度到每个事物内部,OOP就显得无能为力了。

   

       如日志功能。日志代码往往水平地散布在所有对象层次当
中,却与它所散布到的对象的核心功能毫无关系。对于其他很多类似功能,如事务管理、权限控制等也是如此。这导致了大量代码的重复,而不利于各个模块的重
用。  

       而AOP技术则恰恰相反,它利用一种称为"横切"的技术,能够剖解开封装的对象内部,并将那些影响了多个类并且与具体业务无关的公共行为 封装成一个独立的模块(称
为切面)。更重要的是,它又能以巧夺天功的妙手将这些剖开的切面复原,不留痕迹的融入核心业务逻辑中。这样,对于日后横切功能的编辑和重用都能够带来极大的方便。  

 

    一个实际工作中遇到的例子,

     我在A环节提交一个表单,给下个B环节来审核,但是,因为之前规定,如果在每月15号之后,则不能提交, 我们通常的做法是在提交表单的方法中做这个检查,

     但是,如果这些不同的提交方法 都要在提交前做检查,未免太重复了,加重了工作量,也造成代码的冗余,所以我们一用到AOP ,对要提交的方法 在具体执行前,做个方法前通知,来检查是不是满足规定就好,如果不满足,则抛出异常,前台捕获,不能提交了于是。

 

下面讲一个简单的通过XML文件来对AOP做个实现。

 

      在spring配置文件上配置如下代码

<bean id="myAdvisor" class="org.qin.yinglian.system.web.CodeAOPTest">
    </bean>
    <aop:config>
        <!-- 切点 -->
        <aop:pointcut  id="servicePointcut" 

            expression="execution(* org.qin.yinglian.basic.service.*.*(..))"  />
        <!-- 切面(切点+通知) -->
        <aop:aspect id="serviceAspect" ref="myAdvisor">
            <!-- 执行的切面方法 -->
            <aop:before method="beforeAdviso" pointcut-ref="servicePointcut" />
        </aop:aspect>
    </aop:config>

 

通知类:

package org.qin.yinglian.system.web;

public class CodeAOPTest {

 // 前置通知
    public void beforeAdvisor() {
       System.out.println("Hello");
    }
}

本文出自 “JAVA那些事儿” 博客,请务必保留此出处http://1027187712.blog.51cto.com/5509347/1626982

Spring AOP的实际应用

标签:spring aop

原文地址:http://1027187712.blog.51cto.com/5509347/1626982

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!