我正在读《初春》(威利出版社)的书。在第2章中,有一个关于Java配置和@Autowired
的示例。它提供了这个@配置
类
@Configuration
public class Ch2BeanConfiguration {
@Bean
public AccountService accountService() {
AccountServiceImpl bean = new AccountServiceImpl();
return bean;
}
@Bean
public AccountDao accountDao() {
AccountDaoInMemoryImpl bean = new AccountDaoInMemoryImpl();
//depedencies of accountDao bean will be injected here...
return bean;
}
@Bean
public AccountDao accountDaoJdbc() {
AccountDaoJdbcImpl bean = new AccountDaoJdbcImpl();
return bean;
}
}
还有这个普通的豆类课
public class AccountServiceImpl implements AccountService {
@Autowired
private AccountDao accountDao;
public void setAccountDao(AccountDao accountDao) {
this.accountDao = accountDao;
}
...
}
当我运行代码时,它就工作了。但我预期会出现异常,因为我在配置中定义了两个具有相同类型的bean。
我意识到它是这样工作的:
这不对吗?Spring对Java配置的处理是否存在缺陷?
文档对此进行了解释
对于回退匹配,bean名称被视为默认限定符值。因此,您可以使用id“main”而不是嵌套的限定符元素来定义bean,从而得到相同的匹配结果。然而,尽管您可以使用此约定按名称引用特定bean,@Autowired
基本上是关于带有可选语义限定符的类型驱动注入的。这意味着,即使有bean名称回退,限定符值在类型匹配集中也总是具有狭义语义;它们不在语义上表示对唯一bean id的引用
所以,不,这不是bug,这是预期的行为。如果by类型自动连线没有找到一个匹配的bean,那么bean id(名称)将用作回退。
问题内容: 我正在读初春(威利出版社)的书。在第二章中有一个关于Java配置和Java的示例。它提供了这个类 还有这个普通的bean类 当我运行代码时,它可以工作。但是我期待一个异常,因为我在配置中定义了2个具有相同类型的bean。 我意识到它的工作原理是这样的: 如果Spring遇到多个具有相同类型的bean,它将检查字段名称。 如果找到具有目标字段名称的bean,则将该bean注入该字段。 这
我有一个关于Spring注释的问题。在我的(学习)项目中,我定义了两个类,另一个类有两个属性,每种类型一个。为了生成一个错误,我在XML中定义了两个相同类类型的beans,并且在setter方法中使用了@Autowired注释。大概是这样的: 在主类中,我获取此 Bean 的应用程序上下文的实例,并打印覆盖 toString 方法的属性的内容,这是一个简单的测试。我已经读到Spring自动连线注释
我使用的是Spring Boot1.3,我有下面的配置类: 当我试图按名称注入下面的bean之一时,它抛出:没有定义[java.text.SimpleDateFormat]类型的合格bean:预期的是单个匹配bean,但找到了2:dateAndTimeFormater,DateFormater。 如有任何建议,将不胜感激?
我正在使用selenium Java搜索不同的网站,我知道要查找特定的WebElement,有不同的方法,比如使用Xpath、使用Class或使用id。假设某网站具有如下所示的html结构 现在,如果我想从类名为“score”和“score_title”的div中提取文本,即1%的强度、43:1的情感、75%的激情和12%的到达,下面哪个选项最好。
问题内容: 我正在寻找一些关于JavaScript何时按值传递值,何时按引用传递,何时修改传递的项目影响函数外部值以及何时不传递值的良好综合阅读材料。我还对何时通过引用与按值分配给另一个变量以及是否遵循除作为函数参数传递以外的任何其他规则进行分配感兴趣。 我已经进行了很多搜索,找到了很多具体的示例(其中很多都在SO上),可以从这些示例中整理出一些真实的规则,但是我还没有找到一个写得很好的文档来描述
我知道有可能通过名字得到一个类,使用 是否可以通过名称检索注释?我尝试了这个: 然后将c转换为