记录

IntelliJ IDEA 中的光标快捷键包括:

在行首和行尾移动光标:Home 和 End 键
在单词间移动光标:Ctrl + Left/Right
在代码块首尾移动光标:Ctrl + Shift + [ 或 ]
在文件首尾移动光标:Ctrl + Home 或 Ctrl + End
跳到与当前光标位置对应的括号处:Ctrl + Shift +
在行内快速移动光标:Shift + 左右方向键

[内部类实现Serializable接口但类对象仍然不可序列化]
这是因为Position是一个内部类,例如GloEvoPageActivity,这意味着Position实例拥有对封闭GloEvoPageActivity实例的引用,不可序列化。
使Position成为静态或顶级类,并解决出现的任何编译错误。

idea抽取方法的快捷键
Ctrl+Alt+M:抽取方法
Ctrl+Alt+V:抽取变量
Ctrl+Alt+F:抽取字段
Ctrl+Alt+C:抽取常量
Ctrl+Alt+P:抽取参数

@PostConstruct不能用在带参数的方法
定义:
@PostConstruct是Java自带的注解,在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。

从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void()方法。

语法:
@PostConstruct
public void someMethod(){}
或者

public @PostConstruct void someMethod(){}
作用:
@PostConstruct注解的方法在项目启动的时候执行这个方法,也可以理解为在spring容器启动的时候执行,可作为一些数据的常规化加载,比如数据字典之类的。

执行顺序:
Constructor >> @Autowired >> @PostConstruct

其实从依赖注入的字面意思就可以知道,要将对象p注入到对象a,那么首先就必须得生成对象a和对象p,才能执行注入。所以,如果一个类A中有个成员变量p被@Autowried注解,那么@Autowired注入是发生在A的构造方法执行完之后的。

如果想在生成对象时完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么久无法在构造函数中实现。为此,可以使用@PostConstruct注解一个方法来完成初始化,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。
[图片上传中...(image.png-a093d1-1692233752174-0)]

@PostConstruct在项目中的用处:

  1. spring项目加载数据字典
    @PostConstruct注解的方法在项目启动的时候执行这个方法,也可以理解为在spring容器启动的时候执行,可作为一些数据的常规化加载,比如数据字典之类的。

  2. spring项目的定时任务
    spring自带的@schedule,没有开关,项目启动总会启动一个线程;做项目的时候就使用Java的timer,这个设置开关即可自由的控制,关闭的时候,不会启动线程;Java的timer也需要找到一个启动类,可以放到main函数里面启动,这样的话,代码的耦合性太高了,而使用PostConstruct是很干净的。

spring中Constructor、@Autowired、@PostConstruct的顺序

其实从依赖注入的字面意思就可以知道,要将对象p注入到对象a,那么首先就必须得生成对象p与对象a,才能执行注入。所以,如果一个类A中有个成员变量p被@Autowired注解,那么@Autowired注入是发生在A的构造方法执行完之后的。

如果想在生成对象时候完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么就无法在构造函数中实现。为此,可以使用@PostConstruct注解一个方法来完成初始化,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。

类初始化调用顺序: Constructor >> @Autowired >> @PostConstruct

  1. 初始化类
    假设类UserController有个成员变量UserService被@Autowired修饰,那么UserService的注入是在UserController的构造方法之后执行的。

    1. 如果想在UserController对象生成时候完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入的对象,那么就无法在构造函数中实现(ps:spring启动时初始化异常),例如:

public class UserController {
@Autowired
private UserService userService;

public UserController() {
    // 调用userService的自定义初始化方法,此时userService为null,报错
    userService.userServiceInit();
}

}

因此,可以使用@PostConstruct注解来完成初始化,@PostConstruct注解的方法将会在UserService注入完成后被自动调用。

public class UserController {
@Autowired
private UserService userService;

public UserController() {
}

// 初始化方法
@PostConstruct
public void init(){
    userService.userServiceInit();
}

}

特点:
1、只有一个非静态方法能使用此注解
2、被注解的方法不得有任何参数
3、被注解的方法返回值必须为void
4、被注解方法不得抛出已检查异常
5、此方法只会被执行一次

java初始化map的四种方式
第一种 最常见的方式(新建Map对象)
public class Demo{
private static final Map<String, String> myMap = new HashMap<String, String>();
static{
myMap.put("a", "b");
myMap.put("c", "d");
}
}
第二种 java8新特性–双括号初始化
HashMap<String, String > myMap = new HashMap<String, String>(){{
put("a","b");
put("b","b");
}};
第三种 java9新特性–最简便的方式
Map.of("Hello", 1, "World", 2);//不可变集合
第四种 Guava
Map<String, Integer> myMap = ImmutableMap.of("a", 1, "b", 2, "c", 3);

idea补全括号ctrl+shift+enter

file.delete()不起作用的问题
出了删除不了文件的问题,大部分的原因还是没有关闭流,一定要认真检查代码。

模板引擎
www.cnblogs.com/xsge/p/13915356.html
https://getbootstrap.com/

mysql5.7区时差八个小时
SELECT @@global.time_zone;
SELECT @@session.time_zone;
这些命令将分别显示全局时区设置和当前会话的时区设置。如果显示的时区不正确,你可以使用以下命令来修改时区设置
SET GLOBAL time_zone = '+8:00';
SET time_zone = '+8:00';
FLUSH PRIVILEGES;

在 Windows 11 中,左下角的搜索功能可以通过以下快捷键来访问:
Win键:按下键盘上的 Windows 徽标键(通常位于键盘左下角),然后开始输入你要搜索的内容。

json在线工具
https://www.toolscat.com/json/json-java

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容