Aspectj LTW 实践
本文将介绍使用 AspectJ,介绍它的 3 种织入方式。
AspectJ 作为 AOP 编程的完全解决方案,提供了三种织入时机,分别为
- compile-time:编译期织入,在编译的时候一步到位,直接编译出包含织入代码的 .class 文件
- post-compile:编译后织入,增强已经编译出来的类,如我们要增强依赖的 jar 包中的某个类的某个方法
- load-time:在 JVM 进行类加载的时候进行织入
本文将介绍使用 AspectJ,介绍它的 3 种织入方式。
AspectJ 作为 AOP 编程的完全解决方案,提供了三种织入时机,分别为
大家都知道OOP,即ObjectOriented Programming,面向对象编程。而本文要介绍的是AOP。AOP是Aspect Oriented Programming的缩写,中译文为面向切向编程。OOP和AOP是什么关系呢?首先:
在OOP的世界中,问题或者功能都被划分到一个一个的模块里边。每个模块专心干自己的事情,模块之间通过设计好的接口交互
OOP和AOP都是方法论。我记得在刚学习C++的时候,最难学的并不是C++的语法,而是C++所代表的那种看问题的方法,即OOP。同样,今天在AOP中,我发现其难度并不在利用AOP干活,而是从AOP的角度来看待问题,设计解决方法。这就是为什么我特意强调AOP是一种方法论的原因
###AOP
Java 语言中,从织入切面的方式上看,存在三种织入方式:编译期织入、类加载期织入和运行时织入。
编译期织入是指在Java编译期,采用特殊的编译器,将切面织入到Java类中;而类加载织入则指通过通过特殊的类加载器,在类字节码加载到JVM时,织入切面;运行期织入则是采用CGLib工具或者JDK动态代理进行切面的织入。
所以,AOP 代理则可分为静态代理和动态代理两大类
本篇将对信息安全领域中(主要指)认证、授权、鉴权和权限控制这四个概念给出相应的定义,并对这个概念之间的相互关系进行梳理。
认证是指根据声明者所特有的识别信息,确认声明者的身份。认证在英文中对应于identification这个单词。
最常见的认证实现方式是通过用户名和密码,但认证方式不限于此。下面都是当前常见到的认证技术,
为了确认用户的身份,防止伪造,在安全要求高的场合,经常会使用组合认证(或者叫多因素认证),也就是同时使用多个认证方式对用户的身份进行校验。
副标题:超三成的python 初学者,倒在了这三个坑内
坊间流传着一句经典:“人生苦短,我用Python!”
python目前斩获的头衔有:挤掉java成为编程语言排行第二、增量最快、AI时代头牌语言,甚至已经入选北京山东等地的中小学教材,因为其简单易用,适用广泛,已经成为很多初学编程人的首选语言。
但由于Python的某些特有的历史原因,例如版本兼容问题等,导致在学习的过程中,总会遇到几个大坑,导致刚刚萌芽的学习热情就被无情浇灭。本篇主要讲解初学python过程中最常遇到的3个大坑:
学习这几点,初学者不再倒在入门的门槛上,轻松入门;已入门的,可以帮您提高python开发使用和效率
Java中的类型float、double用来做计算会有精度丢失问题,下面来看下面的示例。
1 | public static void main(String[] args) { |
上面的程序输出结果是多少?
0.07?非也!
正确的结果是:
1 | 0.06999999999999999 |
为什么是这样?
nginx对下划线的头信息做了限制
不用下划线
配置nginx 参数
underscores_in_headers on; (默认 underscores_in_headers 为off)
第一种:proxy_pass后缀不加斜杠
1 | location /abc/ { |
第二种:proxy_pass后缀加斜杠
1 | location /abc/ { |
上面两种配置,区别只在于proxy_pass转发的路径后是否带/
本文所描述的启动参数在如下JVM版本测试通过,
1 | java version "1.8.0_172" |
启动参数的推荐值主要针对的场景为:4核CPU + 4G内存的机器配置,部署单应用,应用的堆内存使用量在1-2GB。
| 参数名 | 说明 | 默认值 | 推荐值 | 备注 |
|---|---|---|---|---|
| server | Java Hotsport Server VM | 64位机器默认为server选项 | 启用 | - |
在使用 Git 作为版本控制的时候,我们可能会由于各种各样的原因提交了许多临时的 commit,而这些 commit 拼接起来才是完整的任务。那么我们为了避免太多的 commit 而造成版本控制的混乱,通常我们推荐将这些 commit 合并成一个。
首先你要知道自己想合并的是哪几个提交,可以使用git log命令来查看提交历史,假如最近4条历史如下:
我们在使用Git进行版本控制时,有可能会出现这种情况。git push后发现提交的内容不是想要的,这时候我们怎么做呢,提交上去的内容是没有删除按钮的(比如github,或码云)。所以我们需要一些手段将提交上去内容撤销下来。
首先将本地的内容回退到自己想要的版本。回退版本我一般使用
git reset
fork 了别人的仓库后,原作者又更新了仓库,如何将自己的代码和原仓库保持一致?
假设远程源仓库为A,自己fork后的远程仓库为B,自己本地的代码仓库为C
给 fork下来的仓库 配置一个 remote源
一般来说从自己远程仓库B去拉代码后就会有remote
使用 git remote -v 查看远程状态。
git remote -v
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
Update your browser to view this website correctly. Update my browser now