在Spring中,我可以使用@值注入配置各种对象,如int、boolean、String等。我甚至可以用一个@值注入配置整个映射结构。
假设我们有以下TCP服务器规范类:
public class TcpServerSpec {
private boolean enabled;
private String host;
private int port;
/* getters & setters */
}
我可以按名称插入多个服务器规范的映射,执行。。。
@Value("${com.harry.potter.sockets}")
private HashMap<String, TcpServerSpec> sockets;
。。。使用以下YAML配置(application-test1.yml):
com:
harry:
potter:
sockets:
server1:
enabled: true
host: host1
port: 1111
server2:
enabled: true
host: host2
port: 2222
但通常需要介于两者之间:只注入一个TcpServerSpec:
@Value("${com.harry.potter.sockets.server1}")
private TcpServerSpec server1;
然后我可以成功通过以下测试:
@RunWith(SpringRunner.class)
@SpringBootTest
@ConfigurationProperties("com.harry.potter.sockets")
@TestPropertySource(locations = "classpath:application-test1.yml")
public class MyServerConfiguration1Test {
@Value("${com.harry.potter.sockets.server1}")
private TcpServerSpec server1;
@Value("${com.harry.potter.sockets.server2}")
private TcpServerSpec server2;
@Test
public void testServer1Spec() {
Assert.assertTrue(server1.isEnabled());
Assert.assertThat(server1.getHost(), is("host1"));
Assert.assertThat(server1.getPort(), is(1111));
}
@Test
public void testServer2Spec() {
Assert.assertTrue(server2.isEnabled());
Assert.assertThat(server2.getHost(), is("host2"));
Assert.assertThat(server2.getPort(), is(2222));
}
}
为什么这不可能?还是这样?
你想要的不是@Value,而是@ConfigurationProperties。
您可以像这样手动声明bean:
@Configuration
class BeanConfig {
@Bean
@ConfigurationProperties(prefix = "com.harry.potter.sockets.server1")
public TcpServerSpec server1() {
return new TcpServerSpec();
}
@Bean
@ConfigurationProperties(prefix = "com.harry.potter.sockets.server2")
public TcpServerSpec server2() {
return new TcpServerSpec();
}
}
然后将这些bean注入@Qualifier(“server1”)和@Qualifier(“server2”)。
我在这个论坛上读到了很多关于尝试Autowire pojo时发生的类似问题的文章,通常修复的答案与或/有关。但是,在我的例子中,我设法autowire我的pojo(Mas60010),但我不能autowire或以及可能来自我没有编写代码的包的任何其他对象。 为了简单起见,我只提到。我做错了什么?我想问题要么出在库上,要么出在配置上。注意:请不要仅仅通过显示一个与他自己的POJO相关的问题来指出这个
我们一直在使用Spring@Value注释来注入属性值。我们有一个约定来命名属性名称,以匹配它们注入的java字段。这带来了不必要的工作,即每个ConfigBean的java字段都需要用@Value注释。 我正在寻找一种方法,用新的注释注释java类(比如说ConfigBean),让一些后处理器读取这些bean的属性名称,并自动注入属性值。 我正在寻找一些关于如何在没有@Value注释的情况下实现
问题内容: 我有 一切都正确加载。 然后在我的JavaScript中,我尝试注入ngCookies: 但是它似乎找不到$ cookies: 问题答案: 我不确定您的功能用例是什么,但是您不能在配置块中注入服务(即服务)。仅常量和提供程序可以注入配置块内。 您可以将服务注入运行块,但我不知道这是否对您有帮助,因为我不确定您打算如何处理这些cookie。 顺便说一句:您似乎在混合主角度文件和模块的版本
问题内容: 我将Spring 3.1.3用于Web应用程序,将XML配置与组件扫描结合使用。 我意识到,其中一个扫描组件必须在其他几个组件之前进行初始化。在所有需要构造后初始化的类上,我在方法上具有@PostConstruct批注。 为了设置依赖关系顺序,我在需要先后构造的类上将“ @Component”更改为“ @Component(“ configData”)”。然后,在每个需要在“ conf
根据我所读到的内容,这是我执行依赖顺序所需要的全部内容。 然后我构建了所有的东西,设置了我的断点,并启动了应用程序。我希望在任何依赖bean之前到达“configData”bean中的断点。事情不是这样的。第一个断点在一个依赖bean的“init”方法中。 然后我更改了“log4j.xml”,将“debug”设置为“org.springframework”的日志级别,并重新运行测试。断点行为是相同
这是我的束缚 错误在于 /Users/X/AndroidStudioProjects/Corotuines/app/build/generated/source/kapt/debug/com/example/corotuines/application/ApplicationMain_HiltComponents.java:126:错误:[Dagger/Mis的绑定]com.example.cor