当前位置: 首页 > news >正文

java框架学习日志-10(自定义类实现AOP)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

第二种实现方式——自定义实现

通过springAPI来实现需要通过实现接口或者继承来构建关注点。自定义实现的话就不需要了。Log代码如下

public class Log {
    public void before(){
        System.out.println("——————方法执行前");
    }
    public void after(){
        System.out.println("——————方法执行后");
    }

}

Service和ServiceImpl代码不变。

public interface Service {
    public void add();
    public void update();
    public void delete();
    public void search();

}

public class ServiceImpl implements Service{
    @Override
    public void add() {
        System.out.println("增加用户");
    }

    @Override
    public void update() {
        System.out.println("修改用户");
    }

    @Override
    public void delete() {
        System.out.println("删除用户");
    }

    @Override
    public void search() {
        System.out.println("查询用户");
    }
}

beans配置修改如下。在aop:config里增加aop:aspect,ref是关联的关注点。aop:pointcut同样是切入点。befor和after对应前置通知和后置通知。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

    <bean id="service" class="ServiceImpl"/>
    <bean id="log" class="Log"/>
    <aop:config>
        <aop:aspect ref="log">
            <aop:pointcut id="pointcut" expression="execution(* ServiceImpl.*(. .))"/>
            <aop:before method="before" pointcut-ref="pointcut"/>
            <aop:after method="after" pointcut-ref="pointcut"/>
        </aop:aspect>

    </aop:config>

</beans>

测试如下

转载于:https://my.oschina.net/u/4000133/blog/2992196

相关文章:

  • 说一说飞机上的无线上网
  • C#中的线程池使用(一)
  • android实现图片识别的几种方法
  • 12月24日云栖精选夜读 | 刚刚,阿里开源首个深度学习框架 X-Deep Learning!
  • 微信智能开放平台
  • SqlServer如何获取存储过程的返回值
  • MyEclipse2014配置Tomcat开发JavaWeb程序JSP以及Servlet http://my.csdn.net/21aspnet/message CSDN Five...
  • 梯度下降
  • ES7 ES8 的新特性(部分)
  • Android程序完全退出
  • P2-2017级算法第二次上机 B 女娲加农炮
  • 很好的学习平台
  • 前言-如何学习区块链
  • 移除孤立的或已删除的链接克隆
  • Windows 8.1 Windows Phone 8.1 通用程序
  • AHK 中 = 和 == 等比较运算符的用法
  • ES6系列(二)变量的解构赋值
  • Ruby 2.x 源代码分析:扩展 概述
  • 高性能JavaScript阅读简记(三)
  • 组复制官方翻译九、Group Replication Technical Details
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (007)XHTML文档之标题——h1~h6
  • (06)金属布线——为半导体注入生命的连接
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (层次遍历)104. 二叉树的最大深度
  • (分布式缓存)Redis哨兵
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)详解PHP处理密码的几种方式
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET 发展历程
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .NET与 java通用的3DES加密解密方法
  • @Autowired多个相同类型bean装配问题
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [Android]使用Retrofit进行网络请求
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)
  • [C#]winform使用引导APSF和梯度自适应卷积增强夜间雾图像的可见性算法实现夜间雾霾图像的可见度增强
  • [C++基础]-初识模板
  • [cogs2652]秘术「天文密葬法」
  • [JavaWeb]——过滤器filter与拦截器Interceptor的使用、执行过程、区别
  • [JS入门到进阶] 哎,被vite小坑了一波,大家记得配置build.cssTarget为‘chrome61‘
  • [Mac软件]Boxy SVG 4.20.0 矢量图形编辑器
  • [NISACTF 2022]sign-ezc++
  • [OpenAI]继ChatGPT后发布的Sora模型原理与体验通道
  • [paper] lift,splat,shooting 论文浅析
  • [python] logging输出到控制台(标准输出)