当前位置: 首页 > 知识库问答 >
问题:

为什么按类别设置@Autowired电线?

胡翔
2023-03-14

如果每个bean都有名称,我们有getBean()方法,它接收bean名称,在XML配置中我们也按名称注入bean,那么为什么在Java配置中我们只限于按类连接的@Autowired注释?

将bean从另一个配置注入到一个配置中的常规方法是什么?可以按名称引用bean而不使用限定符吗?

使现代化

我找到了一种在配置之间按名称自动连接的方法。

首先,我按类自动连接整个配置:

@Autowired
MySeparateConfig mySeparateConfig;

然后我就从那个bean调用实例化方法

@Bean
MyDependentBean myDependentBean() {
   MyDependentBean ans = new MyDependentBean();
   ans.setProperty( mySeparateConfig.myNamedBeanInDifferentConfig() );
   return ans;
}

根据定义,配置属于不同的类。

共有1个答案

李星辰
2023-03-14

实际上,有几种通过注释注入bean的方法。

既然我们有这个豆子

<bean id="standardPasswordEncoder" class="org.springframework.security.crypto.password.StandardPasswordEncoder" />

据我所知,在java类中,我们可以使用以下方法来注入它

@Autowired  // by type
StandardPasswordEncoder standardPasswordEncoder;

@Autowired
@Qualifier("standardPasswordEncoder")  // by bean id
StandardPasswordEncoder standardPasswordEncoder;

javax.annotation.@Resource  // by bean id
StandardPasswordEncoder standardPasswordEncoder;

javax.inject.@Inject  // by type
StandardPasswordEncoder standardPasswordEncoder;

或者使用spEL

@Value(#{standardPasswordEncoder})  // by bean id
StandardPasswordEncoder standardPasswordEncoder;

然而,我也不知道为什么SpringAutowired的默认值是按类型的,我也想知道为什么。我认为按类型自动连线是危险的。希望这对你有帮助。

 类似资料:
  • 我在spring boot项目中为我们的服务类编写单元测试。当我自动连接正在测试的类时,测试正常运行,当我使用@MockBean insead of @Autowire时,测试失败。 有人能帮我区别一下@MockBean失败的原因吗?另外,在mockito中有一种模仿autowired类(当前类)方法的方法。

  • 也许给出问题的最好方法是在下面显示代码:

  • 我刚刚安装了Ubuntu desktop 12.04并通过以下方式安装了Java 6 JDK: 但是当我转到时,我没有看到一个名为的目录,所以我认为它根本不存在!?! 当我转到时,我看到: 我现在正试图将作为环境变量添加到中,以便从基于shell的Ant构建中访问它: ? ? 还有别的吗? 我所说的“”是指我在系统上安装的JDK6的顶级目录,无论它在哪里······

  • 问题内容: 我有一个具有字段()的Spring 类(),但是该字段是我尝试使用它时所用的。日志显示该bean和该bean都在创建,但是每当我尝试在服务bean上调用该方法时,都会得到一个a 。Spring为什么不自动接线该领域? 控制器类: 服务等级: 应该自动连接的服务bean,但不是: 当我尝试时,出现以下异常: 问题答案: 本文向大家介绍为什么我的Spring @Autowired字段为空?

  • MapStruct文档对为NullValueMappingStrategy选择的合理默认值有如下说明。返回默认值: Bean映射:将返回一个“空”的目标Bean,除了常量和表达式之外,它们将在出现时填充。 基本体:将返回基本体的默认值,例如,布尔值为false,int值为0。 迭代器/数组:将返回一个空的迭代器。 地图:将返回一个空地图。 问题是,我们希望能够在@Mapper级别上指定,例如,It

  • 问题内容: 我正在使用以下代码(尝试)查询数据库: 其中clientRequest [0]来自字符串数组,服务变量是POJO中的字符串,映射到MySQL数据库中的VARCHAR(45)。 当我运行此代码时,Hibernate将执行的SQL查询显示为: 这使我相信clientRequest [0]的值未正确设置为参数。 我检查了clientRequest [0]包含一个有效的String,它确实这样