当前位置: 首页 > news >正文

门户网站 cms家具公司网站源码

门户网站 cms,家具公司网站源码,建筑工程承包方式,汽车 营销 网站建设Inject Qualifier Named 在依赖注入#xff08;DI#xff09;中#xff0c;Inject、Qualifier 和 Named 是用于管理对象创建和绑定的关键注解。以下是它们的用途、依赖配置和代码示例的详细说明#xff1a; 1. 注解的作用 Inject#xff1a;标记需要注入的构造函数、字段…Inject Qualifier Named 在依赖注入DI中Inject、Qualifier 和 Named 是用于管理对象创建和绑定的关键注解。以下是它们的用途、依赖配置和代码示例的详细说明 1. 注解的作用 Inject标记需要注入的构造函数、字段或方法JSR-330 标准。Qualifier定义自定义注解用于解决同一类型多个实现的依赖冲突。Named基于字符串名称的限定符Qualifier 的简化版直接用于区分实现。 2. 依赖配置 Maven (pom.xml) - 使用 javax.inject传统 Java EE dependencygroupIdjavax.inject/groupIdartifactIdjavax.inject/artifactIdversion1/version /dependencyMaven (pom.xml) - 使用 Jakarta EE dependencygroupIdjakarta.inject/groupIdartifactIdjakarta.inject-api/artifactIdversion2.0.1/version /dependencyGradle (build.gradle.kts) - Kotlin DSL dependencies {// Java EEimplementation(javax.inject:javax.inject:1)// 或 Jakarta EEimplementation(jakarta.inject:jakarta.inject-api:2.0.1) }3. 代码示例 场景多个 Service 实现需通过名称或限定符区分 步骤 1定义接口和实现类 public interface Service {void execute(); }// 实现类 1 public class EmailService implements Service {Overridepublic void execute() {System.out.println(Sending email...);} }// 实现类 2 public class SmsService implements Service {Overridepublic void execute() {System.out.println(Sending SMS...);} }步骤 2使用 Named 注解区分实现 import javax.inject.Inject; import javax.inject.Named;public class Client {private final Service service;// 通过名称注入特定实现Injectpublic Client(Named(email) Service service) {this.service service;}public void run() {service.execute();} }步骤 3配置依赖注入框架以 Dagger 2 为例 添加 Dagger 依赖 !-- Maven -- dependencygroupIdcom.google.dagger/groupIdartifactIddagger/artifactIdversion2.50/version /dependency dependencygroupIdcom.google.dagger/groupIdartifactIddagger-compiler/artifactIdversion2.50/versionscopeprovided/scope /dependency// Gradle dependencies {implementation(com.google.dagger:dagger:2.50)kapt(com.google.dagger:dagger-compiler:2.50) }定义模块和绑定 import dagger.Module; import dagger.Provides; import javax.inject.Named;Module public class AppModule {ProvidesNamed(email)Service provideEmailService() {return new EmailService();}ProvidesNamed(sms)Service provideSmsService() {return new SmsService();} }创建组件并注入 import dagger.Component;Component(modules AppModule.class) public interface AppComponent {Client getClient(); }// 使用 public class Main {public static void main(String[] args) {AppComponent component DaggerAppComponent.create();Client client component.getClient();client.run(); // 输出: Sending email...} }步骤 4自定义 Qualifier替代 Named 定义自定义限定符注解 import javax.inject.Qualifier; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy;Qualifier Retention(RetentionPolicy.RUNTIME) public interface Email {}Qualifier Retention(RetentionPolicy.RUNTIME) public interface Sms {}在模块中使用自定义限定符 Module public class AppModule {ProvidesEmailService provideEmailService() {return new EmailService();}ProvidesSmsService provideSmsService() {return new SmsService();} }在客户端注入 public class Client {private final Service service;Injectpublic Client(Email Service service) {this.service service;} }4. 常见问题解决 错误No qualifying bean of type Service 原因未明确指定使用哪个实现。修复添加 Named 或自定义 Qualifier 注解。 依赖未生效 检查确保依赖注入框架如 Dagger、Guice、Spring已正确配置并生成必要的代码如 Dagger 需运行 kapt 或 annotationProcessor。 迁移到 Jakarta EE 操作将 javax.inject 替换为 jakarta.inject并更新所有导入语句。 5. 总结 Inject标记注入点。Named通过字符串名称区分实现。Qualifier定义更类型安全的限定符。框架适配根据使用的 DI 工具Dagger、Spring、Guice调整配置。 通过合理使用这些注解可以优雅地管理复杂的依赖关系。 在依赖注入DI框架中如 Spring 或 Google GuiceInject、Qualifier 和 Named 是用于控制依赖注入行为的注解。 Inject Inject 注解用于标记一个字段、方法或构造函数表明应该通过依赖注入框架来注入其依赖项。在 Spring 中Inject 是 JSR-330 标准的一部分它是 Autowired 的一个替代方案但两者在功能上是等效的。使用 Inject 可以让代码更加标准化因为它不依赖于 Spring 特定的注解。 Qualifier Qualifier 注解用于在存在多个相同类型的 bean 时帮助 DI 框架区分应该注入哪个具体的 bean。它通常与自定义注解一起使用这些自定义注解被标记为 Qualifier 的元注解。在 Spring 中如果你有两个相同类型的 bean并且你想通过名称或其他标准来区分它们你可以使用 Qualifier 注解。 Named Named 注解是 JSR-330 标准的一部分它提供了一种简单的方法来指定应该注入哪个 bean当存在多个相同类型的 bean 时。在 Spring 中Named 可以作为 Qualifier 的一个替代方案用于通过名称来区分 bean。与 Qualifier 不同Named 本身就是一个注解而不需要与自定义注解一起使用。 示例 假设你有一个接口 MyService 和两个实现 MyServiceImpl1 和 MyServiceImpl2。 public interface MyService {void doSomething(); }Service(service1) public class MyServiceImpl1 implements MyService {Overridepublic void doSomething() {System.out.println(Doing something in MyServiceImpl1);} }Service(service2) public class MyServiceImpl2 implements MyService {Overridepublic void doSomething() {System.out.println(Doing something in MyServiceImpl2);} }在另一个类中如果你想注入 MyServiceImpl1你可以这样做 public class MyClient {// 使用 Inject 和 Named 来指定要注入的 beanInjectNamed(service1)private MyService myService;public void performAction() {myService.doSomething();} }或者如果你更喜欢使用 Qualifier你可以定义一个自定义注解并使用它来指定要注入的 bean Qualifier Retention(RetentionPolicy.RUNTIME) Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD}) public interface Service1Qualifier { }// 在 MyServiceImpl1 上添加 Service1Qualifier这通常不是必需的除非你有特定的逻辑需要这样做 // 但在注入点使用它public class MyClient {// 使用 Inject 和 Service1Qualifier 来指定要注入的 beanInjectService1Qualifierprivate MyService myService;public void performAction() {myService.doSomething();} }// 你还需要在配置中指定哪个 bean 应该与 Service1Qualifier 关联这通常是通过 Java 配置或 XML 配置来完成的。请注意在上面的 Service1Qualifier 示例中我通常不会在 MyServiceImpl1 上使用 Service1Qualifier 注解而是直接在注入点使用它并通过配置来指定哪个 bean 应该被注入。然而如果你有一个特定的用例需要在实现类上使用它那也是可以的。 在 Spring Boot 中你通常不需要显式地定义 Qualifier 的自定义实现因为 Named 已经提供了足够的功能来通过名称区分 bean。但是如果你想要更复杂的逻辑或更清晰的代码结构定义自定义的 Qualifier 注解可能是有意义的。 在使用依赖注入Dependency Injection, DI时Inject、Qualifier 和 Named 注解用于指定和限定依赖项。它们是 Java 依赖注入规范(JSR-330)和相关框架的一部分。下面是对这些注解的简要介绍以及如何在项目中引入相应的依赖。 Inject Inject 是 JSR-330 标准的一部分用来标记一个构造器、方法或字段应该通过依赖注入来提供依赖。 Qualifier Qualifier 是一个元注解即它被用来创建其他注解用于限定依赖类型当有多个相同类型的依赖需要注入时可以使用自定义的限定符注解来区分不同的实现。 Named Named 是 Qualifier 的一个具体实现允许你通过名称来限定依赖。它是 Jakarta 或 javax 注入包中的一个标准注解。 Maven/Gradle 引入依赖 对于 Gradle Kotlin DSL (build.gradle.kts) 或 Groovy 版本 (build.gradle) 的构建脚本根据你需要的版本选择合适的依赖 Jakarta EE (2.0.1 或更新版本) // build.gradle.kts dependencies {implementation(jakarta.inject:jakarta.inject-api:2.0.1) // 确保选择适合你的最新版本 }或者 Groovy 版本: // build.gradle dependencies {implementation jakarta.inject:jakarta.inject-api:2.0.1 // 确保选择适合你的最新版本 }javax (适用于旧版本) 如果你必须使用旧版本的 javax 注解可以这样添加依赖 // build.gradle.kts dependencies {implementation(javax.inject:javax.inject:1) }或者 Groovy 版本: // build.gradle dependencies {implementation javax.inject:javax.inject:1 }注意由于包名从 javax.* 更改为 jakarta.*如果你是在2025年进行开发并且没有特别的需求去支持旧版本推荐使用 jakarta.inject 相关的依赖。 此外若你在使用特定框架如 Spring它也提供了自己的 Qualifier 和 Named 实现可以直接使用而不需要额外添加上述依赖。确保查阅所使用框架的官方文档以获取更详细的指导。
http://www.hkea.cn/news/14449933/

相关文章:

  • 资料库网站应该怎么做wordpress得到分类id
  • 免费源码下载网站frontpage网页制作实例
  • 网站空间的地址全国建设工程四库一平台
  • wordpress网站在线安装桐梓县工程建设交易网站
  • 电子商务网站建设参考文献山西百度查关键词排名
  • qq网站登录入口长沙网络营销 公司
  • 怎么建网站教程深圳人才招聘网
  • 番禺制作网站系统wordpress 时区 8小时
  • 科技与狠活是什么梗太原网站优化教程
  • 南开区网站建设公司淘宝指数查询官网
  • 浙江省一建建设集团网站建站之星网站登录
  • 怎么免费建立个人网站wordpress 图片加水印
  • 建设网站好公司哪家好WordPress站点地址填错
  • 免费的网站域名查询建设单位到江川区住房和城乡建设局网站
  • 杭州网站基建wordpress网关支付
  • 专业网站建设的公司网络推广引流是什么意思
  • 学生免费建设网站建设网站企业网上银行登录入口官方
  • 网站404设置昆明做网站词排名优化
  • 医院网站建设 中企动力17做网店这个网站好不好
  • 金华网站建设大型网页建设wordpress 栏目描述
  • 网站开发的技术简介代理网约车平台赚钱吗
  • 网站建设教程 冰美人视频免费自建app
  • dede查看网站3d制图软件
  • 东四网站建设免费搭建微信网站
  • wordpress成品站源码如何自己做留言板网站
  • 桐城市建设局网站网页编辑打印工具
  • 排名轻松seo 网站推广网易163企业邮箱注册
  • 建设厅工作证查询网站苏州app开发
  • 网站怎么备案在哪里下载ios网站开发视频教程
  • 企业网站建设怎么做一个完整的网站 技术