首页 > 其他分享 >5月11日总结

5月11日总结

时间:2023-05-12 22:56:02浏览次数:38  
标签:11 总结 get username AOP opt root email

初级篇
AOP是什么?

Aspect-oriented Programming (AOP) 即面向切面编程。
简单来说,AOP 是一种编程范式,允许我们模块化地定义横跨多个对象的行为。AOP 可以帮助我们将应用程序的关注点分离,使得代码更加清晰、易于维护和扩展。

大白话:在方法执行前后运行指定代码,比如日志记录、事务开启/提交/回滚等。

为什么要AOP?

AOP可以帮助我们解决在代码中耦合度高的问题,让我们的代码更加模块化和易于维护。
具体来说,AOP可以通过在运行时动态地将通用功能(例如日志记录、性能分析、事务管理)应用于多个模块,而无需修改它们的代码。这样可以避免代码重复和嵌套,提高代码的复用性和可维护性。
另外,在复杂的业务场景中,多个模块可能需要共享某些共同的功能,而AOP可以让这些功能从模块中抽离出来,以便更好地进行组织和重用。
总的来说,AOP可以让我们更好地实现代码的分离和聚合,从而获得更高效、更可靠的代码。

大白话:增强原方法的功能,解耦通用功能,透明化静默操作。
举例 事务切面切面:
增强原方法的功能:原本方法使用的是数据库连接默认的策略自动提交事务的,有了切面能够保证方法内同一事务了;
解耦通用功能:但是很多方法都需要做事务的控制,有了切面不需要我们每一个方法都加几行相同的代码;
透明化静默操作:方法本身需要知道我怎么开的事务?需要知道我什么时候多打印了日志吗?

伪代码:没有使用AOP前,每个方法都要CV一遍打印方法执行日志

@Override
public UserPO findByUsername(@AutoTrim String username) {
log.info("execute findByUsername by username={}", username);
Optional opt = userRepository.findOne((root, query, criteriaBuilder) -> criteriaBuilder.equal(root.get("username"), username));
Assert.isTrue(opt.isPresent(), "没有找到用户");
UserPO userPO = opt.get();
log.info("execute findByUsername by username={}; return {} ", username, userPO);
return userPO;
}

@Override
public UserPO findByEmail(@AutoTrim String email) {
log.info("execute findByEmail by email={}", email);
Optional opt = userRepository.findOne((root, query, criteriaBuilder) -> criteriaBuilder.equal(root.get("email"), email));
Assert.isTrue(opt.isPresent(), "没有找到用户");
UserPO userPO = opt.get();
log.info("execute findByEmail by email={}; return {} ", email, userPO);
return userPO;
}

伪代码:使用AOP后,无需关心方法执行日志的打印

@Override
public UserPO findByUsername(@AutoTrim String username) {
Optional opt = userRepository.findOne((root, query, criteriaBuilder) -> criteriaBuilder.equal(root.get("username"), username));
Assert.isTrue(opt.isPresent(), "没有找到用户");
return opt.get();
}

@Override
public UserPO findByEmail(@AutoTrim String email) {
Optional opt = userRepository.findOne((root, query, criteriaBuilder) -> criteriaBuilder.equal(root.get("email"), email));
Assert.isTrue(opt.isPresent(), "没有找到用户");
return opt.get();
}

此处代码演示 【part1】
演示内容:

展示未使用AOP前,使用UserServiceImpl注入Bean,测试接口查看日志打印;
展示使用AOP后,使用UserServiceAopImpl注入Bean,测试接口查看日志打印;
展示切面打印非项目内的类方法执行日志,切换Pointcut为logPointcut2();
展示灵活使用配置,控制切面开启日志,开启@Con

标签:11,总结,get,username,AOP,opt,root,email
From: https://www.cnblogs.com/lmyy/p/17396484.html

相关文章

  • 1011 A+B 和 C(C++)
    一、问题描述:给定区间[−231,231]内的3个整数 A、B 和 C,请判断 A+B 是否大于 C。输入格式:输入第1行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。输出格式:对每组测试用例,在一行中输出 C......
  • 第一阶段冲刺总结(不被踢的理由)
    本组是第21组,组内的人数为三人,团队选择的项目开始是智能排班系统,之后考虑到其他情况换成了智能家居系统,第一阶段的冲刺之后我的组内排名是第三名。在第一阶段的工作之中,我做的工作的大多不是能看到太多的实际性内容,或者说更多情况下做的是团队的总体统方面:    在第一个......
  • 编程一小时2023.5.11
    1.#include<iostream>#include<cstring>#include<algorithm>#include<set>usingnamespacestd;constintN=1010;intt,n;inta[N],b[N];set<int>st;intg[N][N];intmain(){scanf("%d",&t);while(t--......
  • Windows——Windows11右键经典栏与传统栏转换
    图1.Windows11右键默认为经典菜单栏图2.传统右键菜单栏/显示更多选项由经典右键菜单栏变为传统右键菜单栏【图1变图2】运行reg.exeadd"HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32"/f/ve将【显示更多选项】作为默......
  • 每日总结-23.5.12
    <%HttpSessionhttpSession=request.getSession();//Stringtea_id=(String)httpSession.getAttribute("id_");Stringtea_id=request.getParameter("id_");Thesqlthesql=newThesql();request.setCharacterEncoding(......
  • 2023.5.12每日总结
    packageshiyan;importjava.sql.*;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;publicclassAllMethods{publicConnectionconnect;publicAllMethods()throwsException{Class.forName(&q......
  • 标准模板11
    #include<iostream>#include<numeric>#include<functional>#include<vector>usingnamespacestd;intmain(){ intiarray[]={1,2,3,4,5}; vector<int>ivector(iarray,iarray+sizeof(iarray)/sizeof(int)); cout<<accumulate(ivector.beg......
  • 5.12每日总结
    <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd&qu......
  • 总结
       我是希望能做对的队员之一,第一阶段已经完成,绩效评估我是团队中的最后一名,总结了一下,共有以下几点做的不好:  1.我在这门学科中基础比较差,在一起讨论的时候往往更不上他们两个的节奏;  2.敲代码速度太慢,他们完成相应的任务还会帮助我做我的任务,以至于我的工作量是最......
  • 每日总结 5.12
    今日进行了web实验。对于之前所学习的增删改查进行熟练学习。1)    开MySQL,新建一个数据库。2)    新建一个数据库表。3)    在表中增加若干记录,作为初始数据。4)    打开Eclipse软件,新建一个名为Lab03的Web项目,并设置其部署程序为Tomcat。5)    在......