首页 > 解决方案 > 如何禁用 Spring 对类中特定字段的自动装配?

问题描述

下面是一个使用 @Configuration 注解创建 Bean 的类。我正在慢慢地将 Spring 引入到遗留的 Java 应用程序中。我不想一下子把所有东西都 Spring 化——那太疯狂了。我想我会从常用的实用程序类之一开始,我不希望 Spring 为下面的三个字段(Enumerator、RandomDataGenerator、AliasMethodFactory)创建 Bean。如何关闭这些字段的自动装配?Spring 目前抱怨它无法为那些找到 Bean(它显然是在尝试自动连接它们)。

@Configuration
public class CustomRandom {

    private Enumerator enumerator;
    private RandomDataGenerator rDataGenerator;
    private AliasMethodFactory amf;

    @Bean
    @Primary
    public static CustomRandom buildRandom() {
        return new CustomRandom(
                new Enumerator(),
                new RandomDataGenerator(
                        new MersenneTwister(System.currentTimeMillis() * Thread.currentThread().getId())
                ),
                new AliasMethodFactory()
        );
    }

    CustomRandom(Enumerator enumerator, RandomDataGenerator generator, AliasMethodFactory amf) {
       this.enumerator = enumerator;
       this.rDataGenerator = generator;
       this.amf = amf;
   }

//UNRELATED INSTANCE METHODS FOLLOW...

标签: javaspringspring-boot

解决方案


Seperate the class for the Bean and the Configuration of the Bean. Like this

@Configuration
public class CustomRandomConfiguration
{
    @Bean
    @Primary
    public static CustomRandom buildRandom()
    {
        return new CustomRandom(
            new Enumerator(),
            new RandomDataGenerator(
                new MersenneTwister(System.currentTimeMillis() * Thread.currentThread().getId())
            ),
            new AliasMethodFactory()
        );
    }
}

and the bean:

public class CustomRandom
{

    private Enumerator enumerator;
    private RandomDataGenerator rDataGenerator;
    private AliasMethodFactory amf;

    public CustomRandom(Enumerator enumerator, RandomDataGenerator rDataGenerator, AliasMethodFactory amf)
    {
        this.enumerator = enumerator;
        this.rDataGenerator = rDataGenerator;
        this.amf = amf;
    }
}

推荐阅读