一、引出问题
  有个接口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("哈哈");

最新文章

  1. angualr 实现tab选项卡功能
  2. Swift 3 and OpenGL on Linux and macOS with GLFW
  3. 2013 duilib入门简明教程 -- 前言(1)
  4. resque 遍历加载job目录下的类
  5. Quartz在Spring中动态设置cronExpression (spring设置动态定时任务)
  6. 微信公众平台开发教程(十一)微信&quot;企业号“上线
  7. Mysql常出现的问题
  8. java web多线程
  9. 关于Android悬浮窗要获取按键响应的问题
  10. 使用Unity3D自带动画系统制作下雨效果
  11. Java前端Rsa公钥加密,后端Rsa私钥解密(目前还不支持中文加密解密,其他都行)
  12. 我来讲讲在c#中怎么进行xml文件操作吧,主要是讲解增删改查!
  13. linux 备份系统
  14. mysql 查询缓存配置和查看
  15. 用线性单元(LinearUnit)实现工资预测的Python3代码
  16. 移动App专项测试
  17. Java包装类之Integer的 &quot;==&quot; 判断数值是否相等的陷阱及原因分析
  18. Jquery中addClass方法不起作用的解决方案
  19. mongodb group操作 以及管道 aggregate 分组排序分页
  20. Sitecore CMS中更改项目的模板

热门文章

  1. 【mysql学习-2】
  2. 使用NPOI快速导出导入Excel
  3. C#截取两个字符串间的字符串问题
  4. C# 生成机器码
  5. 9 udp广播
  6. jmeter常用的内置变量
  7. jquery框架一点小心得
  8. hdu1506 Largest Rectangle in a Histogram
  9. 第三十四篇 Python面向对象之 反射(自省)
  10. git安装后Gitbase闪退,gui无法使用问题解决