@@ -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
@@ -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