1. controller里的方法,用private修饰
一开始啥问题没有,直到我加了AOP,那个接口就获取不到service了,一直是null。
原因:这个和springAOP实现机制有着密切的关系,spring实现AOP有两种实现方法:JDK代理和cglib字节码。优先使用哪种不同版本spring可能并不一样,例如SpringBoot 2.x 版本已经默认改成了 CGLIB,需要记住的是:
1.代理对象有接口,可以使用jdk代理
2.如果代理对象没有接口只能使用cglib实现Aop,cglib通过继承的方式重写被代理类的方法,实现逻辑织入
我这里很明显,没有接口,只能去使用cglib,cglib需要继承,而private不能继承。
2. idea调试工具,因为一直用的一个电脑也没注意,只记得自己电脑的快捷键了,换个电脑不会用了,所以写下来回顾一下
step over:一步一步往下走,如果这一行有方法也不会进入方法。就是很直观的走我们看到的每一行代码
step into:步入,如果当前行有方法,就会进入方法内,不会进入官方类库(并不好用,有很多方法依旧会进入)
Force step into:进入任何方法
Step Out :跳出当前方法,,返回到方法调用处
Run To Cursor:运行到打断点的地方
Drop Frame:销毁当前栈帧,回到方法执行之前。
3. @Service("***"),起名字和不起名字有啥区别?
一、@service("serviceName"): 表示给当前类命名一个别名,方便注入到其余类中a
二、@service:不加的话,默认别名就是当前类名,可是首字母小写spring
其实只要一个接口没有多个实现类的话,完全不需要起别名,这个起别名主要是为了解决一个接口有多个实现类的情况的。真要使用的时候,配合@Qualifier("***"),来注入我们想要注入的实现类。
4. 关于log4j
想写一些简单使用步骤来着,但细想一下,并没有什么需要写的,使用那么简单。有空看看源代码吧。
对了,记得开启异步日志
5. log4j-1.2-api-2.3。jar作用是什么
log4j到log4j2的桥接包
log4j1.x使用private static Logger logger = Logger.getLogger(TestLog4j.class)获取日志对象
log4j2的Logger没有此方法,所以升级的时候可能出现需要更改代码。如果引入此包,可以实现不更改代码升级
6.jar包冲突问题
上周接了一个升级log4j的任务,一开始以为很简单,直接将jar包替换就重启项目发现能够记录日志,以为万事大吉。但是第二个项目升级的时候我先是删除了jar包,接着直接启动项目,依旧是启动成功了,这令我感到吃惊。
经过排查最终发现,我删掉的那个包在项目中根本就没用到,项目中一直用到的是一个叫做tika包下的log4j。哎,直接裂开。
原因是每次jar包加载,都先加载了tika包,所以tika包里面的就先被加载,我们真正想要使用的jar包就加载不了了。为了先让项目正常启动,我调换了jar包加载顺序,让我需要的jar包先加载,就实现了替换。打包测试也正常。
但是最后还是觉得tika这个包太碍事了,在征得领导同意之后,我将此包进行了移除。移除过程很无聊,就是不停的重启报错,然后解决错误,最主要的还是缺jar包,所以缺啥jar包就去仓库下啥jar包。最后也是比较顺利的解决了吧,但是还有很多东西没来得及细研究。
还有就是,类加载机制需要复习。以前总觉得这玩意用不到,用到的时候不够用。