Skip to content

Commit c03d5e0

Browse files
committed
Update Java Notes
1 parent a1aa654 commit c03d5e0

File tree

2 files changed

+115
-17
lines changed

2 files changed

+115
-17
lines changed

Java.md

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10400,7 +10400,7 @@ FullGC 同时回收新生代、老年代和方法区,只会存在一个 FullGC
1040010400
* 老年代空间不足:
1040110401

1040210402
* 为了避免引起的 Full GC,应当尽量不要创建过大的对象以及数组
10403-
* 通过 -Xmn 参数调整新生代的大小,让对象尽量在新生代被回收掉不进入老年代,可以通过 -XX:MaxTenuringThreshold 调大对象进入老年代的年龄,让对象在新生代多存活一段时间
10403+
* 通过 -Xmn 参数调整新生代的大小,让对象尽量在新生代被回收掉不进入老年代,可以通过 `-XX:MaxTenuringThreshold` 调大对象进入老年代的年龄,让对象在新生代多存活一段时间
1040410404

1040510405
* 空间分配担保失败
1040610406

@@ -10748,7 +10748,9 @@ Java 语言提供了对象终止(finalization)机制来允许开发人员提
1074810748

1074910749

1075010750

10751-
#### 无用类
10751+
#### 无用属性
10752+
10753+
##### 无用类
1075210754

1075310755
方法区主要回收的是无用的类
1075410756

@@ -10766,6 +10768,32 @@ Java 语言提供了对象终止(finalization)机制来允许开发人员提
1076610768

1076710769

1076810770

10771+
##### 废弃常量
10772+
10773+
在常量池中存在字符串 "abc",如果当前没有任何 String 对象引用该常量,说明常量 "abc" 是废弃常量,如果这时发生内存回收的话**而且有必要的话**(内存不够用),"abc" 就会被系统清理出常量池
10774+
10775+
10776+
10777+
***
10778+
10779+
10780+
10781+
##### 静态变量
10782+
10783+
类加载时(第一次访问),这个类中所有静态成员就会被加载到静态变量区,该区域的成员一旦创建,直到程序退出才会被回收
10784+
10785+
如果是静态引用类型的变量,静态变量区只存储一份对象的引用地址,真正的对象在堆内,如果要回收该对象可以设置引用为 null
10786+
10787+
10788+
10789+
参考文章:https://blog.csdn.net/zhengzhb/article/details/7331354
10790+
10791+
10792+
10793+
***
10794+
10795+
10796+
1076910797
### 回收算法
1077010798

1077110799
#### 标记清除

SSM.md

Lines changed: 85 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2930,8 +2930,8 @@ Spring 优点:
29302930

29312931
### 基本概述
29322932

2933-
- IoC(Inversion Of Control)控制反转,Spring反向控制应用程序所需要使用的外部资源
2934-
- **Spring 控制的资源全部放置在 Spring 容器中,该容器称为 IoC 容器**
2933+
- IoC(Inversion Of Control)控制反转,Spring 反向控制应用程序所需要使用的外部资源
2934+
- **Spring 控制的资源全部放置在 Spring 容器中,该容器称为 IoC 容器**(存放实例对象)
29352935
- 官方网站:https://spring.io/ → Projects → spring-framework → LEARN → Reference Doc
29362936

29372937
![](https://gitee.com/seazean/images/raw/master/Frame/Spring-IOC介绍.png)
@@ -3311,7 +3311,7 @@ IoC 和 DI 的关系:IoC 与 DI 是同一件事站在不同角度看待问题
33113311

33123312
代码实现:
33133313

3314-
* DAO层:要注入的资源
3314+
* DAO 层:要注入的资源
33153315

33163316
```java
33173317
public interface UserDao {
@@ -3327,7 +3327,7 @@ IoC 和 DI 的关系:IoC 与 DI 是同一件事站在不同角度看待问题
33273327
}
33283328
```
33293329

3330-
* Service业务层
3330+
* Service 业务层
33313331

33323332
```java
33333333
public interface UserService {
@@ -3357,7 +3357,7 @@ IoC 和 DI 的关系:IoC 与 DI 是同一件事站在不同角度看待问题
33573357
}
33583358
```
33593359

3360-
* 配置applicationContext.xml
3360+
* 配置 applicationContext.xml
33613361

33623362
```xml
33633363
<!--2.将要注入的资源声明为bean-->
@@ -3418,7 +3418,7 @@ IoC 和 DI 的关系:IoC 与 DI 是同一件事站在不同角度看待问题
34183418

34193419
代码实现:
34203420

3421-
* DAO层:要注入的资源
3421+
* DAO 层:要注入的资源
34223422

34233423
```java
34243424
public class UserDaoImpl implements UserDao{
@@ -4315,6 +4315,8 @@ public class UserServiceImpl implements UserService {
43154315
}
43164316
```
43174317

4318+
一个对象的执行顺序:Constructor >> @Autowired(注入属性) >> @PostConstruct(初始化逻辑)
4319+
43184320

43194321

43204322
***
@@ -4394,7 +4396,9 @@ private String username;
43944396

43954397

43964398

4397-
##### 属性填充
4399+
##### 自动装配
4400+
4401+
###### 属性注入
43984402

43994403
名称:@Autowired、@Qualifier
44004404

@@ -4426,7 +4430,7 @@ private UserDao userDao;
44264430

44274431

44284432

4429-
##### 属性设置
4433+
###### 优先注入
44304434

44314435
名称:@Primary
44324436

@@ -4451,7 +4455,7 @@ public class ClassName{}
44514455

44524456

44534457

4454-
##### 注解对比
4458+
###### 注解对比
44554459

44564460
名称:@Inject、@Named、@Resource
44574461

@@ -4464,11 +4468,77 @@ public class ClassName{}
44644468

44654469
- type:设置注入的 bean 的类型,接收的参数为 Class 类型
44664470

4467-
**@Autowired 和 @Resource之间的区别**:
4471+
@Autowired 和 @Resource之间的区别:
4472+
4473+
* @Autowired 默认是**按照类型装配**注入,默认情况下它要求依赖对象必须存在(可以设置它 required 属性为 false)
4474+
4475+
* @Resource 默认**按照名称装配**注入,只有当找不到与名称匹配的 bean 才会按照类型来装配注入
4476+
4477+
4478+
4479+
****
4480+
4481+
4482+
4483+
##### 静态注入
4484+
4485+
Spring 容器管理的都是实例对象,**@Autowired 依赖注入的都是容器内的对象实例**,在 Java 中 static 修饰的静态属性(变量和方法)是属于类的,而非属于实例对象
4486+
4487+
当类加载器加载静态变量时,Spring 上下文尚未加载,所以类加载器不会在 Bean 中正确注入静态类
4488+
4489+
```java
4490+
@Component
4491+
public class TestClass {
4492+
@Autowired
4493+
private static Component component;
4494+
4495+
// 调用静态组件的方法
4496+
public static void testMethod() {
4497+
component.callTestMethod();
4498+
}
4499+
}
4500+
// 编译正常,但运行时报java.lang.NullPointerException,所以在调用testMethod()方法时,component变量还没被初始化
4501+
```
4502+
4503+
解决方法:
4504+
4505+
* @Autowired 注解到类的构造函数上,Spring 扫描到 Component 的 Bean,然后赋给静态变量 component
4506+
4507+
```java
4508+
@Component
4509+
public class TestClass {
4510+
private static Component component;
4511+
4512+
@Autowired
4513+
public TestClass(Component component) {
4514+
TestClass.component = component;
4515+
}
4516+
4517+
public static void testMethod() {
4518+
component.callTestMethod();
4519+
}
4520+
}
4521+
```
4522+
4523+
* @Autowired 注解到静态属性的 setter 方法上
4524+
4525+
* 使用 @PostConstruct 注解一个方法,在方法内为 static 静态成员赋值
4526+
4527+
* 使用 Spring 框架工具类获取 bean,定义成局部变量使用
4528+
4529+
```java
4530+
public class TestClass {
4531+
// 调用静态组件的方法
4532+
public static void testMethod() {
4533+
Component component = SpringApplicationContextUtil.getBean("component");
4534+
component.callTestMethod();
4535+
}
4536+
}
4537+
```
4538+
44684539

4469-
* @Autowired 默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它required属性为false)
44704540

4471-
* @Resource 默认按照名称来装配注入,只有当找不到与名称匹配的bean才会按照类型来装配注入
4541+
参考文章:http://jessehzx.top/2018/03/18/spring-autowired-static-field/
44724542

44734543

44744544

@@ -4482,7 +4552,7 @@ public class ClassName{}
44824552

44834553
类型:类注解
44844554

4485-
作用:加载properties文件中的属性值
4555+
作用:加载 properties 文件中的属性值
44864556

44874557
格式:
44884558

@@ -4586,9 +4656,9 @@ public class ClassName {
45864656

45874657
@DependsOn
45884658

4589-
- 微信订阅号,发布消息和订阅消息的bean的加载顺序控制(先开订阅,再发布)
4659+
- 微信订阅号,发布消息和订阅消息的 bean 的加载顺序控制(先开订阅,再发布)
45904660

4591-
- 双11活动期间,零点前是结算策略A,零点后是结算策略B,策略B操作的数据为促销数据。策略B加载顺序与促销数据的加载顺序
4661+
- 双 11 活动,零点前是结算策略 A,零点后是结算策略 B,策略 B 操作的数据为促销数据,策略 B 加载顺序与促销数据的加载顺序
45924662

45934663
@Lazy
45944664

0 commit comments

Comments
 (0)