- 类加载顺序
父类静态字段/静态语句块
子类静态字段/静态语句块
父类普通字段/语句块
父类构造方法
子类普通字段/语句块
子类构造方法
tips: 静态方法调用的时候加载
静态代码块只加载一次, 普通代码块实例化一次执行一次
- @ModelAttribute
每次请求接口前执行, 可用于每次请求前,做初始化操作
- @DependsOn
控制bean加载顺序
spring保证如果A依赖B(如beanA中有@Autowired B的变量),那么B将先于A被加载
如果beanA不直接依赖B,可以使用该注解
- @PostConstruct
在依赖注入完成后, 执行初始化操作
初始化顺序: Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct方法
- InitializingBean 接口
初始化方法afterPropertiesSet()
-
@ConfigurationProperties(prefix = "test")
取出配置文件中, 前缀为test的属性, 并赋值同名属性
可与@Component 或 @EnableConfigurationProperties 或 @Bean 配合使用
-
@Conditional 满足条件, 注册Bean
-
@ConditionalOnProperty 根据配置属性的值与目标值对比, 决定是否注册Bean
-
@ConditionalOnBean 给定的Bean存在时, 则注册Bean
-
@ConditionalOnMissingBean 给定的Bean不存在时, 则注册Bean
-
@Scope 指定Bean为单例还是多例
- 四种引用
强引用: 一个对象具有强引用,它就不会被垃圾回收器回收。即使当前内存空间不足,JVM也不会回收它,
而是抛出 OutOfMemoryError 错误
Object object= new Object() //强引用
object=null //取消强引用
软引用: 使用软引用时,如果内存的空间足够,软引用就能继续被使用,而不会被垃圾回收器回收;只有在
内存空间不足时,软引用才会被垃圾回收器回收
Object object= new Object();
SoftReference<Object> softReference = new SoftReference<>(object);
Object result = softReference.get();
弱引用: gc的时候就会被回收,不管内存是否充足
Object object= new Object();
WeakReference<Object> weakReference= new WeakReference<>(object);
Object result = weakReference.get();
虚引用: 任何时候都可能被垃圾回收器回收, 虚引用和没有引用是一样的,需要和队列(ReferenceQueue)联合使用
当jvm扫描到虚引用的对象时, 会先将此对象放入关联的队列中,可以通过判断队列中是否存这个对象, 来进行回收前的一些处理
Object object= new Object();
ReferenceQueue queue = new ReferenceQueue();
PhantomReference pr = new PhantomReference(object, queue);