在java中调用非静态消息传递函数

在java中调用非静态消息传递函数,java,spring,websocket,messaging,stomp,Java,Spring,Websocket,Messaging,Stomp,我正在尝试使用STOMP和WebSocket从应用程序中的任何位置发送消息。但是,我遇到了问题,因为我无法使“greet”方法成为静态的,因为该方法中有“this.template”。那么我就不能调用这个方法了。如何解决此问题 这是我的控制器类: @Controller 公共类Hello控制器{ @Autowired private SimpMessagingTemplate template; @Autowired public HelloController(SimpMessagingT

我正在尝试使用STOMP和WebSocket从应用程序中的任何位置发送消息。但是,我遇到了问题,因为我无法使“greet”方法成为静态的,因为该方法中有“this.template”。那么我就不能调用这个方法了。如何解决此问题

这是我的控制器类:

@Controller
公共类Hello控制器{

@Autowired
private SimpMessagingTemplate template;

@Autowired
public HelloController(SimpMessagingTemplate template) {
    this.template = template;
}

public HelloController() {

}

public static void replier(String reply) {
    greet(reply);
}

@RequestMapping(value="/hello", method=RequestMethod.POST)
public void greet(String greeting) {
    Greeting text = new  Greeting("Goodbye, " + greeting + "!");
    this.template.convertAndSend("/topic/greetings", text);
}

@RequestMapping(value="/", method=RequestMethod.GET)
public String index() {
    return "index";
}

@MessageMapping("/hello")
@SendTo("/queue/greetings")
public static Greeting greeting(HelloMessage message) throws Exception {
    System.out.println("Sending message...");
    beginRoute(message.getName());
    return new Greeting("Hello, " + message.getName() + "!");
}

@SendTo("/queue/informer")
public static Greeting beginRoute(String message) {
    Application.startBody(message);
    //System.out.println("Returning from second message!");
    return new Greeting("So long, " + message + "!");
}

replier方法中的greet(reply)调用无效,因为我无法对非静态方法进行静态调用。我如何调用greet并发送消息?

我不明白为什么您认为
greeting
需要是静态的

我在网上找到了这个:


试着让
问候语
不是静态的。如果你在使用非静态方法时遇到问题,请告诉我们问题所在。

嗨,Matthew!谢谢你回复我。很抱歉方法名称混乱,但我希望能从任何地方调用“问候”方法,而不是“问候”方法。你有什么建议吗?我希望能够从我的应用程序中的任何类调用greet方法,所以它不需要是静态的吗?你可以将模板变量设置为静态的,然后greet方法也可以是静态的。或者你可以将它们都设置为特定于实例。这两种方法都无法做到。请参阅。你也可以创建一个类型为
GreetingController
的静态变量,或者您可以使用该模式。这样,您可以从应用程序中的任何位置轻松访问
GreetingController
类型的实例。
@Controller
public class GreetingController {

    @MessageMapping("/greeting") {
    public String handle(String greeting) {
        return "[" + getTimestamp() + ": " + greeting;
    }
}