From f1b6a66e2f09bdc1ea5923ae5cc4534c3787f4b9 Mon Sep 17 00:00:00 2001 From: xuchengsheng Date: Wed, 18 Oct 2023 14:15:29 +0800 Subject: [PATCH] =?UTF-8?q?@Resource=E6=B3=A8=E8=A7=A3=E6=BA=90=E7=A0=81?= =?UTF-8?q?=E5=88=86=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 - spring-jsr/spring-jsr250-resource/README.md | 8 ++++---- spring-jsr/spring-jsr330-inject/README.md | 22 ++++++++++----------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 3d175ae..ddd9a90 100644 --- a/README.md +++ b/README.md @@ -98,7 +98,6 @@ - [**单例模式@Singleton**](spring-jsr/spring-jsr330-singleton/README.md) - 深入理解`@Singleton`注解,确保Spring Bean的单一实例化。 - ## 🔄持续更新中 为了给大家提供最新、最有价值的内容,我会坚持每天更新这个仓库。每一天,你都可以期待看到一些新的内容或者对已有内容的改进。如果你有任何建议或反馈,欢迎随时联系我。我非常珍视每一个反馈,因为这是我持续改进的动力。 diff --git a/spring-jsr/spring-jsr250-resource/README.md b/spring-jsr/spring-jsr250-resource/README.md index c3bbbaf..01a32da 100644 --- a/spring-jsr/spring-jsr250-resource/README.md +++ b/spring-jsr/spring-jsr250-resource/README.md @@ -107,13 +107,13 @@ public @interface Resource { 2. **类型指定** + 通过 `type` 属性,它允许指定所需资源的具体Java类型,确保注入的资源与预期类型匹配,从而提供类型安全。 3. **身份验证策略** - + `authenticationType` 属性允许开发者选择资源的身份验证方式,决定是由容器还是应用程序来进行身份验证。 + + `authenticationType` 属性允许我们选择资源的身份验证方式,决定是由容器还是应用程序来进行身份验证。 4. **共享策略** + 通过 `shareable` 属性,它指定资源是否可以在多个客户端或组件之间共享。 5. **供应商特定名称** + `mappedName` 属性可以提供与资源关联的供应商或平台特定的名称,增加部署的灵活性。 6. **描述信息** - + 通过 `description` 属性,为资源提供了简要描述,有助于开发者和系统管理员理解其用途。 + + 通过 `description` 属性,为资源提供了简要描述,有助于我们和系统管理员理解其用途。 ### 五、最佳实践 @@ -589,7 +589,7 @@ protected Object autowireResource(BeanFactory factory, LookupElement element, @N 3. **类型 vs 名称** + `@Resource` 默认是基于名称进行自动装配的。如果没有找到名称匹配的bean,它会回退到类型匹配。这与 `@Autowired` 不同,后者默认基于类型进行自动装配。 4. **指定名称** - + 您可以通过 `name` 属性明确指定要注入的 bean 的名称:`@Resource(name = "myService")`。 + + 我们可以通过 `name` 属性明确指定要注入的 bean 的名称:`@Resource(name = "myService")`。 5. **处理冲突** + 在一个上下文中,如果有多个相同类型的 bean,为避免冲突,最好使用 `name` 属性明确指定想要注入的 bean。 6. **与其他注解的结合** @@ -599,7 +599,7 @@ protected Object autowireResource(BeanFactory factory, LookupElement element, @N 8. **必需性** + 默认情况下,`@Resource` 注解的依赖是必需的,即如果没有找到相应的 bean,会抛出异常。如果某些情况下允许依赖项为 null 或不存在,必须结合其他配置来实现,例如使用 `@Autowired(required = false)`。 9. **懒加载** - + 在Spring中,如果您希望延迟资源的初始化并在首次请求时加载它,可以结合 `@Lazy` 注解使用。 + + 在Spring中,如果我们希望延迟资源的初始化并在首次请求时加载它,可以结合 `@Lazy` 注解使用。 ### 九、总结 diff --git a/spring-jsr/spring-jsr330-inject/README.md b/spring-jsr/spring-jsr330-inject/README.md index 11ab637..0041302 100644 --- a/spring-jsr/spring-jsr330-inject/README.md +++ b/spring-jsr/spring-jsr330-inject/README.md @@ -22,7 +22,7 @@ ### 二、注解描述 -`@Inject`注解起源于JSR-330,也称为`javax.inject.Inject`。这是Java依赖注入的一个标准化规范。Spring支持这个注解,意味着你可以在Spring应用中使用`@Inject`来执行依赖注入,与使用Spring原生的`@Autowired`注解类似。与`@Autowired`不同的是`@Inject`没有一个内置的“`required`”属性。这意味着,如果你想要一个可选的依赖注入。但是,我们可以使用 Java 8 的 `java.util.Optional` 类型来达到类似的效果。 +`@Inject`注解起源于JSR-330,也称为`javax.inject.Inject`。这是Java依赖注入的一个标准化规范。Spring支持这个注解,意味着我们可以在Spring应用中使用`@Inject`来执行依赖注入,与使用Spring原生的`@Autowired`注解类似。与`@Autowired`不同的是`@Inject`没有一个内置的“`required`”属性。这意味着,如果我们想要一个可选的依赖注入。但是,我们可以使用 Java 8 的 `java.util.Optional` 类型来达到类似的效果。 ### 三、接口源码 @@ -39,16 +39,16 @@ public @interface Inject { ### 四、主要功能 1. **自动注入依赖** - - 使用 `@Inject`,你可以请求框架自动为某个字段、构造函数或方法注入一个依赖。这意味着你不需要手动创建和管理对象的实例。 + - 使用 `@Inject`,我们可以请求框架自动为某个字段、构造函数或方法注入一个依赖。这意味着我们不需要手动创建和管理对象的实例。 2. **多种注入点** - **字段注入** - 可以直接在类的字段上使用 `@Inject`,从而请求框架为该字段提供相应的bean。 - **构造函数注入** - - 将 `@Inject` 放在类的构造函数上,表示你想通过该构造函数注入依赖。 + - 将 `@Inject` 放在类的构造函数上,表示我们想通过该构造函数注入依赖。 - **方法注入** - - 可以在setter方法或任何其他方法上使用 `@Inject`,表示你希望框架通过调用该方法来注入依赖。 + - 可以在setter方法或任何其他方法上使用 `@Inject`,表示我们希望框架通过调用该方法来注入依赖。 3. **与其他注解协同工作** - - 特别是与 `@Named` 注解结合,用于消除依赖的歧义。例如,如果你有多个实现同一接口的bean,你可以使用 `@Named` 指定你想要注入哪一个bean。 + - 特别是与 `@Named` 注解结合,用于消除依赖的歧义。例如,如果我们有多个实现同一接口的bean,我们可以使用 `@Named` 指定我们想要注入哪一个bean。 4. **跨框架兼容性** - 由于 `@Inject` 是 JSR-330 标准的一部分,使用它可以增加代码的可移植性。这意味着,理论上,使用 `@Inject` 注解的代码应该能在任何支持 JSR-330 的框架(如 Spring、Java EE、Google Guice 等)中运行。 @@ -547,25 +547,25 @@ if (value != null) { ### 八、注意事项 1. **需要依赖**: - - 由于 `@Inject` 是 JSR-330 规范的一部分,你需要在项目中添加 `javax.inject` 依赖。如果不这样做,你的代码将无法编译。 + - 由于 `@Inject` 是 JSR-330 规范的一部分,我们需要在项目中添加 `javax.inject` 依赖。如果不这样做,我们的代码将无法编译。 2. **无 `required` 属性**: - 与 Spring 的 `@Autowired` 不同,`@Inject` 没有 `required` 属性。这意味着如果没有找到匹配的bean,它会默认抛出异常。 3. **与其他注解的组合**: - - 为了指定具体的bean或解决多个可选bean之间的歧义,你可以与 `@Named` 注解结合使用。例如:`@Inject @Named("specificBeanName")`。 + - 为了指定具体的bean或解决多个可选bean之间的歧义,我们可以与 `@Named` 注解结合使用。例如:`@Inject @Named("specificBeanName")`。 4. **不仅限于Spring**: - 尽管 `@Inject` 在 Spring 中得到了很好的支持,但它并不是 Spring 特有的。其他实现了 JSR-330 规范的框架(如 Google Guice)也支持 `@Inject`。 5. **推荐使用构造器注入**: - - 尽管你可以在字段、方法和构造器上使用 `@Inject`,但现代的最佳实践建议使用构造器注入。这确保了bean的不变性和更好的测试性。 + - 尽管我们可以在字段、方法和构造器上使用 `@Inject`,但现代的最佳实践建议使用构造器注入。这确保了bean的不变性和更好的测试性。 6. **循环依赖问题**: - - 如果你在使用字段或方法注入时不小心引入了循环依赖,Spring容器可能会抛出异常。使用构造器注入时,循环依赖会更明显地暴露出来。 + - 如果我们在使用字段或方法注入时不小心引入了循环依赖,Spring容器可能会抛出异常。使用构造器注入时,循环依赖会更明显地暴露出来。 7. **不要混合使用**: - 在一个项目中,尽量不要同时使用 `@Inject` 和 `@Autowired`,以保持一致性。选择其中之一并坚持使用。 8. **避免过度使用**: - 依赖注入是一个强大的特性,但也应该谨慎使用。过度使用自动注入,特别是在大型项目中,可能会使代码难以跟踪和维护。 9. **单一职责原则**: - - 如果你发现一个类需要太多的依赖,这可能是违反了单一职责原则的信号。考虑对类进行重构或分解。 + - 如果我们发现一个类需要太多的依赖,这可能是违反了单一职责原则的信号。考虑对类进行重构或分解。 10. **与Java EE的兼容性**: - - 如果你的应用程序在 Java EE 容器中运行,那么容器可能已经有了对 `@Inject` 的原生支持,而无需 Spring。 + - 如果我们的应用程序在 Java EE 容器中运行,那么容器可能已经有了对 `@Inject` 的原生支持,而无需 Spring。 ### 九、总结