当前位置: 首页 > 知识库问答 >
问题:

Springboot,使用Rest控制器从对象访问字段

夏侯玄天
2023-03-14

在使用Springboot创建API以及理解bean的工作方式方面有点困难。

我有三门课,我尽可能简化了它们;

public class ClassA()
{
    private variable neededVar;

    public ClassA()
    {
        //initialise other variables;
    }

    public start()
    {
        /initialise neededVar;
    }

    @Bean
    public variable getNeededVar()
    {
        return neededVar;
    }
}
@SpringBootApplication
public class Application
{
    private static ClassA myClass;

    public static void main( String[] args )
    {
        myClass = new ClassA();
        ClassA.start();

        SpringApplication.run( Application.class, args );
    }
}
@RestController
public class Controller
{
    @Autowired
    private variable neededVar;

    @RequestMapping( "/temp" )
    public string getVar()
    {
        return neededVar.toString();
    }
}

我的问题是,在控制器中,我没有从创建的ClassA对象myClass中获取neededVar,实际上我不确定我得到了什么。

我也尝试过这样做,得到了类似的结果。

@SpringBootApplication
public class Application
{
    private static ClassA myClass;
    private static variable myNeededVar;

    @Bean
    public variable getNeededVar()
    {
        return myNeededVar;
    }

    public static void main( String[] args )
    {
        myClass = new ClassA();
        myNeededVar = myClass.getNeededVar();
        ClassA.start();

        SpringApplication.run( Application.class, args );
    }
}

如果有人能为我指出正确的方向,将neededVar从应用程序中的实例化ClassA中获取到我的rest控制器(以及随后我将创建的所有其他控制器),那将非常感谢。

谢谢

共有1个答案

束高雅
2023-03-14
  • Spring并不完全按照您期望的方式工作。您应该将对象的生命周期委托给Spring。即您不需要手动创建ClassA对象并调用其start方法。
  • @Bean注释用于通知Spring您要创建一个不属于Springautoscan机制的类的对象。
  • 为了将类对象管理委托给Spring,类应该用@Component注释,或者它的其他变体,例如@Controller@Service等。或者您应该告诉Spring如何使用@Bean注释创建该类的对象。

为了演示如何使用组件和Bean,我将把类A标记为组件,并用Bean注入变量。

 @Component
    public class ClassA()
    {
         /*
          * Notice this autowired annotation. It tells spring to insert Variable object.
          * What you were trying to do with getNeededVar() is done using Autowired annotation
          */
        @Autowired
        private Variable neededVar;

    }

现在告诉spring如何为变量创建对象,因为它没有标记为组件

@SpringBootApplication
public class Application
{
    public static void main( String[] args ) {
        SpringApplication.run( Application.class, args );
    }

  // This is how you register non spring components to spring context.
  // so that you can autowire them wherever needed
   @Bean
   public Variable variable() { 
      return new Variable();
   }
}

您的Rest控制器代码保持原样。由于Variable通过SpringApplication类中的@Bean注册到Spring,因此您并不真正需要ClassA。您可以删除它。

@RestController
public class Controller
{
    @Autowired
    private Variable neededVar;

    @RequestMapping( "/temp" )
    public string getVar()
    {
        return neededVar.toString();
    }
}
 类似资料:
  • 问题内容: 为什么无法从另一个内部访问其他控制器方法呢? 像这样。 已编译 如果您不能这样做,那为什么不呢?我还应该怎么做… 问题答案: 最近几个小时遇到相同的问题。我使用了api / services文件夹。它可能不完全是您所需要的,但是它是一个选择。

  • 我是新手,正在尝试学习JavaFX和FXML。我的大部分应用程序逻辑都在FXMLController类中,基类几乎是空的,除了NetBeans IDE生成的基本代码,如下所示 我有一个ID为input1的元素,类型为TextField。如何通过ID访问此(或任何其他)控件?(请记住,我是控制器类而不是主类)。 我在下面找到了这个问题,这正是我要找的,但情况不同,因为它们在定义< code>scen

  • 我试图创建一个简单的REST服务与Spring Boot遵循本教程。webapp文件夹()中的“hello world”html文件正在上打开(我创建了一个Maven-Web-App,因为我希望有一个服务的“欢迎页面”)。但是,如果我试图访问上的REST服务,我会得到一条404消息。 UserController.java: 我错过了什么?服务的URL是否错误?我在某个地方读到Spring Boo

  • 和访问字段,如: 因为我希望有更好的方法来做到这一点。

  • 容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables 防火墙来进行管理和实现。iptables 是 Linux 上默认的防火墙软件,在大部分发行版中都自带。 容器访问外部网络 容器要想访问外部网络,需要本地系统的转发支持。在Linux 系统中,检查转发是否打开。 $sysctl net.ipv4.ip_forwardnet.ipv4.ip_forward = 1 如果为 0,

  • null 我在TopMenuButtons中有一个按钮,它具有openAssisstantStage()方法,打开新的小阶段: 对于这个阶段,我还有FXML文件和控制器(AssisstantController)。只有2个按钮-第一个按钮应该打开前一个阶段和关闭电流,但第二个按钮也应该打开普雷沃阶段,关闭电流,也打开一个特定的标签在我的标签视图和做一些其他逻辑例如。获取实际localDate: 我