java注入 named_java – Spring依赖注入,使用@Named还是@Resource?

在Spring中,有两个单独的注释用于按名称执行依赖注入,javax.annotation.Resource和javax.inject.Named. documentation at Spring表示@Resource应该按名称用于注入:

If you intend to express annotation-driven injection by name,do not

primarily use @Autowired,even if is technically capable of referring

to a bean name through @Qualifier values. Instead,use the JSR-250

@Resource annotation,which is semantically defined to identify a

specific target component by its unique name,with the declared type

being irrelevant for the matching process.

上面的内容有点令人困惑,因为Spring只提倡@Resource而不是@Autowired和@Qualifer.直到later in the documentation才提及@Named.

JSR-250定义了@Resource,而JSR-330定义了@Inject和@Named.我知道它们可以很容易地在Spring中混合和匹配.使用哪个JSR?

看起来像Guice和CDI的可移植性会很好,因此使用JSR-330注释.另一方面,文档还指出Spring中使用JSR-330注释时的几个limitations.

注释注释的最佳实践(如果有)是什么?

谢谢.

Java中,如果你有两个类A和B都继承自同一个父类C,并且你想通过@Autowired或@Resource注解分别注入这两个不同的子类实例,你需要确保以下几点: 1. 首先,你需要将`@Resource`或`@Autowired`注解应用到需要注入的对象上,而不是直接应用在类上。通常会放在方法上,特别是构造函数上。 例如: ```java // 如果是Spring框架 public class ServiceImpl { // 类似Service层的类 private C instanceA; private C instanceB; @Autowired public ServiceImpl(@Qualifier("instanceA") C instanceA, @Qualifier("instanceB") C instanceB) { this.instanceA = instanceA; // 这里的instanceA应该是A类实例 this.instanceB = instanceB; // 这里的instanceB应该是B类实例 } } @Configuration public class AppConfig { @Bean(name = "instanceA") public A aInstance() { return new A(); } @Bean(name = "instanceB") public B bInstance() { return new B(); } } ``` 或者使用`@Qualifier`指定具体的bean名称: ```java @Service public class MyClass { private C instanceA; private C instanceB; @Resource(name = "aInstance") // 使用"aInstance"作为A的bean名称 public void setInstanceA(C instanceA) { this.instanceA = instanceA; } @Resource(name = "bInstance") // 使用"bInstance"作为B的bean名称 public void setInstanceB(C instanceB) { this.instanceB = instanceB; } } ``` 2. 在`AppConfig`或其他配置类中,你需要为每个子类提供单独的`@Bean`定义,并给它们起特定的名称。 注意:这里的`@Qualifier`不是Spring 4.x之前的版本所使用的`@Named`,它用于指定依赖注入的bean的特定名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值