Java 直接在Bean函数中注入值可以吗?

Java 直接在Bean函数中注入值可以吗?,java,spring,spring-boot,dependency-injection,Java,Spring,Spring Boot,Dependency Injection,我想知道如何在代码中以最有效的方式进行依赖项注入 我有以下代码: @Configuration public class SomeName { @Autowired private Other other; @Bean public void method() { other.someMethod(); // some code } } 是否可以将此代码更改为以下代码?其他代码仅用于此函数中 @Conf

我想知道如何在代码中以最有效的方式进行依赖项注入

我有以下代码:

@Configuration
public class SomeName {
    
    @Autowired
    private Other other;

    @Bean
    public void method() {
        other.someMethod();
        // some code    
    }
}
是否可以将此代码更改为以下代码?其他代码仅用于此函数中

@Configuration
public class SomeName {
    
    @Bean
    public void method(Other other) {
        other.someMethod();
        // some code    
    }
}

如果可能,您应该避免@Autowired,并使用构造函数或方法进行注入。 从Java9和JavaModulesProjectJigsaw开始,有一些严格的规则使得您的框架更难更改私有字段的值。 Spring在第一个示例中所做的本质上是——它打破封装来更改私有值的值。有一种方法可以通过模块信息中的opens指令来克服此问题

与使用简单的setter相比,您也变得依赖于您正在使用的框架,并且您的代码变得更难测试

您也没有显式声明您的类依赖于另一个类,因为我可以很容易地实例化它,而其他类将为null

一些资源:

搜索拼图


PS:您的类可能缺少@Configuration

如果可能,您应该避免@Autowired,并使用构造函数或方法进行注入。 从Java9和JavaModulesProjectJigsaw开始,有一些严格的规则使得您的框架更难更改私有字段的值。 Spring在第一个示例中所做的本质上是——它打破封装来更改私有值的值。有一种方法可以通过模块信息中的opens指令来克服此问题

与使用简单的setter相比,您也变得依赖于您正在使用的框架,并且您的代码变得更难测试

您也没有显式声明您的类依赖于另一个类,因为我可以很容易地实例化它,而其他类将为null

一些资源:

搜索拼图


PS:您的类中可能缺少可以正常工作的@Configuration。虽然void@Bean方法有点奇怪,但void只是一个例子。只需使用基于构造函数的注入。您的测试用例将更简单。这将起作用。虽然void@Bean方法有点奇怪,但void只是一个例子。只需使用基于构造函数的注入。您的测试用例将更简单。我同意我的课程中存在一些缺陷,但该课程只是一个说明性的例子。我能让您来我公司重新教育/排除auto-wire-or-d3ath开发人员的毒吗?::@granadaCoder信息学最难的部分之一实际上是与团队成员沟通。尝试让他们做更多的测试,并向他们展示如何更容易地使用constructor/setter injection.ha创建存根。我有专门用于构造函数注入的wiki。以及马克·西曼的链接。但是有些人结婚了。另一件事是他们喜欢过度模仿,这依赖于@autowire属性名称上的魔法字符串匹配。常量代码评审注释在构造函数中注入依赖项,不依赖模拟字符串匹配巫毒。Goodtimes我同意我的课程中有一些陷阱,但那只是一个说明性的例子。我能让你来我公司重新教育/排毒auto-wire-or-d3ath开发人员吗?::@granadaCoder信息学最难的部分之一实际上是与团队成员沟通。尝试让他们做更多的测试,并向他们展示如何更容易地使用constructor/setter injection.ha创建存根。我有专门用于构造函数注入的wiki。以及马克·西曼的链接。但是有些人结婚了。另一件事是他们喜欢过度模仿,这依赖于@autowire属性名称上的魔法字符串匹配。常量代码评审注释在构造函数中注入依赖项,不依赖模拟字符串匹配巫毒。好时光