Spring Autowiring无效

时间:2018-06-16 14:27:54

标签: java spring spring-boot autowired

有人可以解释为什么自动装配在以下情况下不起作用吗?

我有以下课程,我很乐意Autowire:

@Component
public class UserFormatter {
...
}

现在我想要在这个类中自动装配UserFormatter: 如果我将UserFormatter声明为静态,它可以正常工作,但为什么它只能这样工作?

@Data
@Component
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class ScenarioInfo {

    @Transient
    private static UserFormatter userFormatter;

    @Autowired
    public void generateUserFormatter(UserFormatter userFormatter) {
        this.userFormatter = userFormatter;
    }

为什么我不能写

    @Data
    @Component
    @NoArgsConstructor
    @AllArgsConstructor
    @JsonIgnoreProperties(ignoreUnknown = true)
    public class ScenarioInfo {

        @Transient
        @Autowire
        private UserFormatter userFormatter;

为什么我必须使用一个函数来自动设置userFormatter?
如果有人可以帮助我,我会很高兴。:)

1 个答案:

答案 0 :(得分:0)

这取决于您如何初始化ScenarioInfo类。 JB Nizet关于使用new关键字停止所有后续分层自动装配是正确的。如果您想直接从ScenarioInfo方法创建main对象,而@Autowire无法使用App,请使用{{1注释调用类(此处为@Configuration)并使用

Annotationconfigapplicationcontext ctx = new Annotationconfigapplicationcontext(App.class); ScenarioInfo scenarioInfo = ctx.getBean(ScenarioInfo.class);

其中App是其中包含main方法的类。您还可以使用BeanFactory接口及其实现,但ApplicationContext功能更丰富。另外,我自己从未使用过BeanFactory,因此您必须向其他人询问如何为您的项目配置它。