gpt4 book ai didi

java - 我们给 spring 注解起个名字是有原因的吗?

转载 作者:行者123 更新时间:2023-11-30 06:13:38 29 4
gpt4 key购买 nike

我注意到在为 spring 或 spring mvc 使用注解时,一些程序员会为注解命名。例如:

@Repository("customerRepository")
public class CustomerRepositoryImpl implements CustomerRepository{
}

我相信该类在不给 @Repository 命名的情况下功能相同。会不会有命名注解有用的情况?

最佳答案

主要是为了解决自动扫描和使用@Autowired时的歧义。 .我在 this answer 中给出了关于 @Autowired 的详尽解释|这也解释了命名 bean 的必要性。

假设我们有 2 个实现 CustomerRepository 的类:

@Repository
public class MyCustomerRepositoryImpl implements CustomerRepository {
}

@Repository
public class OtherCustomerRepositoryImpl implements CustomerRepository {
}

现在假设我们有一个使用 @Autowired 来注入(inject) CustomerRepository 的类:

public class SomeClass {
@Autowired
private CustomerRepository customerRepository;
}

执行自动扫描时,您需要有一种方法来区分它们。否则 Spring 会抛出一个异常,表示它无法判断应该注入(inject)哪个 bean。

所以我们现在可以为每个实现添加一个逻辑名称:

@Repository("myRepository")
public class MyCustomerRepositoryImpl implements CustomerRepository {
}

@Repository("otherRepository")
public class OtherCustomerRepositoryImpl implements CustomerRepository {
}

现在你可以像下面这样帮助Spring解决二义性:

public class SomeClass {
@Autowired
@Qualifier("myRepository")
private CustomerRepository customerRepository;
}

关于java - 我们给 spring 注解起个名字是有原因的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31631411/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com