Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在这个语句中,Spring中的依赖项注入是如何工作的?_Java_Spring_Spring Boot_Dependency Injection - Fatal编程技术网

Java 在这个语句中,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

我在Spring学习依赖注入,我有以下代码:

    @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。