我有一个类< code >配置:
配置java
public class Config {
private final String p = "Prop";
@Bean
public String getP(){return p;}
}
我如何将它注入到某个构造函数中,例如:
public class SomeC {
private String p;
public SomeC(String p) {
this. p = p;
}
}
我希望这个字符串 p
从配置中注入了值。这可能吗?
如果只有一个String
-type bean,您可以不做任何更改。按类型注入是可用的。
@Configuration
public class Config {
private final String p = "Prop";
@Bean
public String getP() {
return p;
}
}
@Component
public class SomeC {
private String p;
public SomeC(String p) {
this.p = p;
}
}
如果有多个< code>String类型的beans,可以按名称注入。
@Configuration
public class Config {
private final String p = "Prop";
private final String q = "AnotherProp";
@Bean
public String getP() {
return p;
}
@Bean
public String getQ() {
return q;
}
}
@Component
public class SomeC {
@Resource(name = "getP")
private String p;
默认bean名称是方法名<code>getP</code>。您可以通过@Bean(“customName”)
注释进行重命名。
注意:
如果要按名称表示批注驱动的注入,请不要主要使用 @Autowired
(SNIP)。相反,请使用 JSR-250 @Resource
注释
@Resource
仅支持具有单个参数的字段和bean属性setter方法。
限定符注入可用于构造函数注入。
@Configuration
public class Config {
private final String p = "Prop";
private final String q = "AnotherProp";
@Bean
@Qualifier("p")
public String getP() {
return p;
}
@Bean
@Qualifier("q")
public String getQ() {
return q;
}
}
@Component
public class SomeC {
private String p;
public SomeC(@Qualifier("p") String p) {
this.p = p;
}
}
这个答案是一种回退行为。名称和限定符是不同的。
对于回退匹配,Bean 名称被视为默认限定符值。
您应该像这样使用< code>@Autowired:
@Autowired
public SomeC(String p){
this.p = p;
}
或者像这样:
public class SomeC {
@Autowired
private String p;
}
我更喜欢第二种方法,但这会使类更难测试,因为从外部看不到依赖项,因此请谨慎使用。
您必须为bean命名,然后在自动装配引用该名称时使用@Quali的
注解。
示例:
配置java
public class Config {
private final String p = "Prop";
@Bean(name="p")
public String getP(){return p;}
}
有些C.java
public class SomeC {
private String p;
@Autowired
public SomeC(@Qualifier("p") String p) {
this. p = p;
}
}
请帮助理解在哪种情况下我应该使用构造函数注入和设置器注入。请帮我举个合适的例子。 先谢谢你。
大家都知道@Autowired(@Inject etc)注释是由AutowiredAnnotationBeanPostProcessor处理的。它解析并设置用@Autowired注释的字段和setter,但构造函数呢?这是bean后处理器,这意味着它是在已经创建bean之后调用的,但是构造函数也可以标记为@Autowired,那么如何创建这样的bean呢?
问题内容: 假设我有一些类似以下的课程。(为简单起见,这是一个虚构类。) 由于我使用不同的实现,并且可能想对该发送功能进行单元测试,因此我认为我应该注入in 的方法。但是我该怎么做呢? 我见过的所有我理解的Guice示例似乎都是在构造函数中进行注入的: 但是我的类在其构造函数中接受了一个参数,我不想注入该参数。那我该怎么办呢? (注意:我是一个完整的Google Guice noob。我认为我了解
Spring文档说: 每个类只能标记一个带注释的构造函数,但是可以注释多个非必需的构造函数。在这种情况下,每个都被认为是候选的,Spring使用最贪婪的构造函数,其依赖关系可以得到满足——也就是说,具有最多参数的构造函数。构造函数解析算法与具有重载构造函数的非注释类相同,只是将候选对象缩小为注释构造函数。 我测试了它,当我有另一个由 错误: 组织。springframework。豆。工厂BeanC
我有一个接口,它在两个地方定义如下: 我的客户端实现类没有任何注释,只有必需的构造函数。在这种情况下,如何限定正确的接口实现用法?我不想使用,因为在我的例子中,将其中一个用法命名为primary在语义上是不正确的(它们在某种意义上是相等的)。我需要用相同的实现类传递相同的接口,但针对受尊敬的客户机的特定用例进行了不同的配置。我想命名一个参数就足够了,通过这个参数我将实现注入到bean创建方法中,但
注入是将依赖注入对象的过程。 构造函数注入很常见。 在此过程中,依赖项作为参数注入构造函数。 请参阅下面的示例。 创建一个名为GuiceTester的java类。 GuiceTester.java import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Inj