gpt4 book ai didi

java - Spring方法需要创建新的匿名实例并不允许使用现有实例

转载 作者:行者123 更新时间:2023-12-02 05:30:06 25 4
gpt4 key购买 nike

我正在遵循使用 Spring 框架的入门示例,发现 here 。我的问题专门涉及页面上定义的 Application 类下的代码:

package hello;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.*;

@Configuration
@ComponentScan
public class Application {

@Bean
MessageService mockMessageService() {
return new MessageService() {
public String getMessage() {
return "Hello World!";
}
};
}

public static void main(String[] args) {
ApplicationContext context =
new AnnotationConfigApplicationContext(Application.class);
MessagePrinter printer = context.getBean(MessagePrinter.class);
printer.printMessage();
}
}

具体来说,这部分在这里:

    @Bean
MessageService mockMessageService() {
return new MessageService() {
public String getMessage() {
return "Hello World!";
}
};
}

此方法即时创建一个新的匿名 MessageService 对象。就我而言,我想创建一个实例,然后让 mockMessageService 方法返回该单个实例(这是我多年来的做法)。但是,当用以下方法替换该方法时,我遇到了“服务为空”输出。

    @Bean
MessageService mockMessageService() {
return messageService;
}

public static void main(final String[] args) {
final String message = "Hello World!";
final MessageService messageService = new MockMessageService(message);
final Application app = new Application();
app.messageService = messageService;

final ApplicationContext context =
new AnnotationConfigApplicationContext(Application.class);
final MessagePrinter printer = context.getBean(MessagePrinter.class);
if (printer == null) {
System.out.println("printer is null");
return;
}
if (printer.getService() == null) {
System.out.println("service is null");
return;
}
if (printer.getService().getMessage() == null) {
System.out.println("service message is null");
return;
}
printer.printMessage();
}

private MessageService messageService;

所以最终我的问题是,为什么我被禁止使用该类的单个实例,或者换句话说,为什么每次调用该方法时都需要创建一个新实例?

最佳答案

Spring 没有使用您的 app 实例,它正在创建自己的实例。请注意,您向 spring 传递了 Application.class,它不知道您的 app 实例。如果您将 private MessageService messageService 实例成员更改为 static,您应该会得到您想要的。

关于java - Spring方法需要创建新的匿名实例并不允许使用现有实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25639160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com