一、引出问题
  有个接口TestServiceInter,有两个实现方法TestService和Test2Service。他们都有sayHello();我们的需求是在调用这两个方法之前,要先完成写日志的功能;
二、菜鸟的想法
  我在各个实现类的sayHello()方法里面写上写日志的功能就是了。  
这样实现存在的问题:代码冗余。当所有实现类都要加上日志功能的时候,需要写很多重复代码
三、利用AOP前置通知实现此功能
3.1 第一步:我们需要定义一个接口  
package com.jdc.aop;

/**

  • @author DEllComputer

  • @Title: TestService

  • @ProjectName SpringAop

  • @Description:

  • @date 2018/12/251:38 PM
    */
    public interface TestService {

    /**
      * @Description:
      * @param ${tags}
      * @return ${return_type}
      * @throws
      * @author jdc
      * @date 2018/12/25 1:39 PM
      */
    void sayHi(String name);

}
3.2 第二步:实现接口public class www.dasheng178.com TestServiceImpl implements TestService {
private String name;
/**
  * @Description: say hi
  * @param ${tags}
  * @return ${return_www.dongfan178.com  type}
  * @throws
  * @author jdc
  * @date 2018/12/25 1:40 PM
  */
@Override
public void sayHi(String name ) {
System.out.println(“hi:”www.gouyiflb.cn + name);
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;

}3.3 第三步:实现前置通知(AOP中通知的概念就是实现增强代码逻辑的,比如这里的记录日志)
/**

  • @author DEllComputer

  • @Title: MyBeforeAdvice

  • @ProjectName SpringAop

  • @Description: 写日志前置通知

  • @date 2018/12/251:42 PM
    */
    public class MyBeforeAdvice www.ysyl157.com   implements MethodBeforeAdvice {

    /**
      * @Description: 写日志的功能
      * @param ${tags}
      * @return ${return_type}
      * @throws
      * @author jdc
      * @date 2018/12/25 1:44 PM
      */
    @Override
    public void before(Method method, Object[] objects, Object o) throws Throwable {
    System.out.println(“我是写日志的功能。”);
    }
    }前置通知需要实现MethodBeforeAdvice接口,前置通知是在目标方法调用之前调用;3.4 第四步:在Spring的配置文件中配置代理对象,通知,目标对象<?xml version="1.0" encoding="UTF-8"?>

    com.jdc.aop.TestServic

     <!-- 把通知织入代理对象 -->
     <property name="interceptorNames">
         <value>myBeforeAdvice<www.michenggw.com /value>
     </property>
    
     <!-- 配置被代理的对象 -->
     <property name="target" ref="logTestServiceImpl"/>

ProxyFactoryBean是一个代理对象,如果我们被代理的对象实现了接口,[Spring](https://www.itjmd.com/news/show-4314.html)使用的是jdk动态代理技术实现的动态代理;所以我们要告诉代理对象,我们的哪些接口需要被代理,然后哪个对象需要被代理,我的增强实现应该怎么被织入到代理对象(前置,后置,环绕....)3.5 第五步:写测试代码测试 public class TestMain {

public static void main(String[] args) {
    ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
    //获取代理对象
    TestService log = (www.gcyL157.com TestService) ac.getBean("proxyFactoryBean");
    log.sayHi("哈哈");

Spring AOP前置通知实例讲解与AOP详细解析的更多相关文章

  1. Spring AOP前置通知实例说明AOP相关概念

    今天又看了下韩顺平的SpringAOP的讲解,讲解的很透彻.仿照视频自己使用下前置通知. 一.引出问题 有个接口TestServiceInter,有两个实现方法TestService和Test2Ser ...

  2. spring事务传播机制实例讲解

    http://kingj.iteye.com/blog/1680350   spring事务传播机制实例讲解 博客分类:   spring java历险     天温习spring的事务处理机制,总结 ...

  3. Spring AOP前置通知和后置通知

    Spring AOP AspectJ:Java社区里最完整最流行的AOP框架 在Spring2.0以上的版本中,可以使用基于AspectJ注解或基于XML配置的AOP 在Spring中启用Aspect ...

  4. Spring AOP 前置通知

    我们使用AspectJ对Spring进行AOP操作,有两种方式,注解和XML配置方式,先在pom.xml中声明jar包 <dependencies> <dependency> ...

  5. Spring初学之annotation实现AOP前置通知和后置通知

    实现两个整数的加减乘除,并在每个计算前后打印出日志. ArithmeticCalculator.java: package spring.aop.impl; public interface Arit ...

  6. Spring初学之xml实现AOP前置通知、后置通知、返回通知、异常通知等

    实现两个整数的加减乘除,在每个方法执行前后打印日志. ArithmeticCalculator.java: package spring.aop.impl.xml; public interface ...

  7. Spring初学之annotation实现AOP前置通知、后置通知、返回通知、异常通知。

    实现两个整数的加减乘除.在执行每个方法之前打印日志. ArithmeticCalculator.java: package spring.aop.impl; public interface Arit ...

  8. spring3: 切面及通知实例 Aspectj的aop

    1.前置通知 接口: package chapter1.server; public interface IHelloService { public void sayAdvisorBefore(St ...

  9. [转载] Spring框架——AOP前置、后置、环绕、异常通知

    通知类型: 步骤: 1. 定义接口 2. 编写对象(被代理对象=目标对象) 3. 编写通知(前置通知目标方法调用前调用) 4. 在beans.xml文件配置 4.1 配置 被代理对象=目标对象 4.2 ...

随机推荐

  1. MAC系统如何显示隐藏文件解决方法

    苹果Mac OS 操作系统下,隐藏文件默认为隐藏状态,隐藏文件是否显示有多种方法可以设置. 方法一: 打开终端,输入命令行 1.显示Mac隐藏文件的命令: defaults write com.app ...

  2. pig分组统计例子

    1.选取数据样本 在pig安装目录下有一个文件tutorial/data/excite-small.log,其中的数据分为3列,中间用制表符分隔,第一列为用户ID,第二列为Unix时间戳,第三列为查询 ...

  3. 数据结构的C语言基础

    数据结构的C语言基础 1. 数据输出 printf()函数为格式输出函数,它存在于标准函数库中,在C语言程序中可以直接调用,但程序源文件的开头必须包含以下命令: #include < stdi ...

  4. Linux中程序的编译和链接过程

    1.从源码到可执行程序的步骤:预编译.编译.链接.strip 预编译:预编译器执行.譬如C中的宏定义就是由预编译器处理,注释等也是由预编译器处理的. 编译: 编译器来执行.把源码.c .S编程机器码. ...

  5. dot安装和使用

    1.安装 apt-get install graphviz 如果报错说缺少依赖文件,则使用apt自动安装依赖项 apt-get -f install 我在安装中报错: dpkg: unrecovera ...

  6. linux实验-基本指令1

    1.root帐号登录,查看/tmp目录,如果/tmp目录下没有子目录myshare,则建立该目录. 2.创建帐号testuser. 3.把myshare目录及其目录下的所有文件和子目录的拥有者该为te ...

  7. python2.7入门---函数

        不是说现在的高级程序员都是秉承着用最少的代码实现功能么,那么,怎么才能使代码少呢?好吧,不装哔~~~了,这一波操作我说不来,咱们直接来看内容.首先,函数是组织好的,可重复使用的,用来实现单一, ...

  8. 再谈js传值和传址

    js的传值和传址还是真绕,前回文说道 1.值类型是传值的 2.对象和数组是传址的 这两点通过例子的到了证实 然而还有一种情况没有讨论 即 函数的参数的传值和传址 通过实验,在函数中用一个新对象去覆盖传 ...

  9. 读取hbase数据到mysql

    先写一个自己的MyRecordWriter类 extends RecordWriter package calllog; import java.io.IOException; import java ...

  10. Flexbox布局模式的理解

    个人博客地址:  雨中的鱼-前端知识分享   http://www.showhtml5.cc    分享干货,有兴趣的人可以一起来分享前端知识  加Q群:440279380   Flexbox,一种C ...