有人可以解释为什么自动装配在以下情况下不起作用吗?
我有以下课程,我很乐意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?
如果有人可以帮助我,我会很高兴。:)
答案 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,因此您必须向其他人询问如何为您的项目配置它。