AspectJ中注入Spring管理的对象

Spring @Aspect切面无法使用@Autowired注入以及获取被切方法中的某个参数或者某个对象,也无法使用构造器。熟知Spring框架的同学应该知道,有被@AspectJ注解的切面是在Spring容器之外创建的,因此不受Spring容器管理声明周期,并且该实例是单例,在@AspectJ注解的类中,编译后我们就会发现多一个方法:aspectOf(),Aspect切面对象也就是由该方法创建。想要在Spring中对切面进行有效注入,那么必须将该类交由Spring管理。写到这你是不是已经知道怎么处理了呢?

6天 ago

AOP 的利器:ASM 3.0 介绍

ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。

与 BCEL 和 SERL 不同,ASM 提供了更为现代的编程模型。对于 ASM 来说,Java class 被描述为一棵树;使用 “Visitor” 模式遍历整个二进制结构;事件驱动的处理方式使得用户只需要关注于对其编程有意义的部分,而不必了解 Java 类文件格式的所有细节:ASM 框架提供了默认的 “response taker” 处理这一切。

1年 ago

Maven 打包 jar 包的四种方式

Maven 打包 jar 包可分为两种:可执行 jar 包和不可执行 jar 包。顾名思义,可执行就是可以通过命令启动程序:java -jar xxx-demo.jar,不可执行则使用该命令会报 no main manifest attribute, in xxx.jar错误。

1年 ago

05-Docker仓库

Docker 官方维护了一个公共仓库,大约有上万个镜像,大多数情况下,我们可以直接使用该仓库中的镜像部署服务。

通过在 Docker Hub 注册账户,获得一个 dockerId,可能很多人在 Mac 版的 Docker 中看到登录时需要一个 dockerID,其实这个dockerId 就是登录账号。

在 Docker Hub 的 WEB 站点,可以搜索自己感兴趣的镜像,还可以查看镜像的参数,比如nginx、mysql等,可以看到数据nginx html 页面保存的目录,端口配置,可以看到MySQL用户名和密码的设置参数等信息。

2年 ago

Mac OSX之Catalina 10.15中编译OpenJDK8

如果想深入学习JDK 内部的实现机制,最便捷的路径是自己手动编译一套JDK,通过阅读和跟踪debug JDK源码去深入了解Java技术体系的原理,结合各类书籍、文章和博客,对比理解,更容易让你了解JDK是怎么运作的,底层都做了什么。

本文基于目前最新的Mac操作系统Catalina 10.15.1 编译OpenJDK8,编译过程中遇到很多新问题,做个总结,为后来者提供方便。

2年 ago

浅谈分布式锁

随着架构系统的演进,由纯真的单机架构到容器化编排的分布式架构,可以说是一个大型互联网企业发展的必然走向。在网站初创时,应用数量和用户较少,可以把Tomcat和Mysql部署在同一台机器上。随着用户数量增多,访问量增大,并发升高,Tomcat和MySQL竞争资源,此时,单机已经扛不住了,需要把Tomcat和MySQL分离在不同的机器上,用于提升单台机器的处理能力。业务从来没有减少,产品越做越大。应用也越来越复杂,原来的大应用,拆分成多个小应用,加入各级缓存,做了反向代理负责均衡,最后坠入分库分表的深渊。

2年 ago