Java 在这个语句中,Spring中的依赖项注入是如何工作的?
我在Spring学习依赖注入,我有以下代码:Java 在这个语句中,Spring中的依赖项注入是如何工作的?,java,spring,spring-boot,dependency-injection,Java,Spring,Spring Boot,Dependency Injection,我在Spring学习依赖注入,我有以下代码: @Autowired private CamelContext context; @Autowired private Environment environment; @Autowired protected CamelContext createCamelContext(){ return context; } ... } 我知道这个类中注入了上下文和环境b
@Autowired
private CamelContext context;
@Autowired
private Environment environment;
@Autowired
protected CamelContext createCamelContext(){
return context;
}
...
}
我知道这个类中注入了上下文和环境bean,但我不知道这个代码到底注入了什么:
@Autowired
protected CamelContext createCamelContext(){
return context;
}
我不懂这种注射法。这里到底发生了什么?这种注射方法与不注射的简单方法有什么区别:
protected CamelContext createCamelContext(){
return context;
}
任何反馈都将受到重视!谢谢大家! 在这个场景中,
@Autowired
相当于createCamelContext
上的@Bean
和context
上的@Inject
。如果您不提供@限定符
,那么您的代码基本上会接受@Autowired/@injectcamelcontext上下文
,然后查找CamelContext
来填充缺少的值,它会找到@Autowired/@Bean createCamelContext
提供的值
带注释的createCamelContext
和未带注释的createCamelContext之间的区别在于Spring在其Bean中没有该方法,因此在查找@Bean
到@Inject
时,它找不到该方法
在您的特定情况下,值context
将查找CamelContext
,并以createCamelContext
的形式找到一个。此时,createCamelContext
查找context
的值,即null
。它返回该值,该值被注入到上下文中。因此,在任何时候,引用context
或createCamelContext
都应始终产生null
,在这种情况下,@Autowired
相当于createCamelContext
上的@Bean
和context
上的@Inject
。如果您不提供@限定符
,那么您的代码基本上会接受@Autowired/@injectcamelcontext上下文
,然后查找CamelContext
来填充缺少的值,它会找到@Autowired/@Bean createCamelContext
提供的值
带注释的createCamelContext
和未带注释的createCamelContext之间的区别在于Spring在其Bean中没有该方法,因此在查找@Bean
到@Inject
时,它找不到该方法
在您的特定情况下,值context
将查找CamelContext
,并以createCamelContext
的形式找到一个。此时,createCamelContext
查找context
的值,即null
。它返回该值,该值被注入到上下文中。因此,在任何时间点,引用context
或createCamelContext
都应始终生成null
用@Autowired
注释的方法是setter或config方法。它们在bean创建后被调用,并可用于初始化。这些方法的所有参数都将由Spring自动注入。从春天开始:
自动连线方法
配置方法可以具有任意名称和任意
论据数量;这些参数中的每一个都将自动连接到
在Spring容器中匹配bean。Bean属性设置器方法
实际上只是这种通用配置方法的一个特例。
这样的配置方法不必是公共的
但是在您的例子中,createCamelContext()
没有参数,也没有初始化。因此,我看不出有任何理由声明此方法。用@Autowired
注释的方法是setter或config方法。它们在bean创建后被调用,并可用于初始化。这些方法的所有参数都将由Spring自动注入。从春天开始:
自动连线方法
配置方法可以具有任意名称和任意
论据数量;这些参数中的每一个都将自动连接到
在Spring容器中匹配bean。Bean属性设置器方法
实际上只是这种通用配置方法的一个特例。
这样的配置方法不必是公共的
但是在您的例子中,createCamelContext()
没有参数,也没有初始化。因此,我不认为有任何理由声明此方法。我同意在这种特殊情况下使用@Autowired
似乎很奇怪,也不合适。我同意在这种特殊情况下使用@Autowired
似乎很奇怪,也不合适。如果您想更深入地了解什么,这个答案基本上描述了代码在做什么@Bean
、@Autowired
和@Inject
实际上是什么,看一下and。这个答案基本上描述了代码在做什么-如果你想更深入地了解@Bean
、@Autowired
和@Inject
实际上是什么,看一下and。