在Spring MVC中创建具有自动装配功能的基本控制器

时间:2018-11-03 10:01:50

标签: java spring model-view-controller

我真的是春天新手,但是还可以。我必须设置一个spring mvc rest应用程序,该应用程序通过SpringApplicationBuilder.properties()从javafx应用程序获取一些数据。 (这是因为我必须实现一些实际上是皮塔饼的gov库)。

因此,我希望所有其余的mvc控制器都可以扩展Base-或AppController。在此控制器(在其构造函数内)中,我想通过

访问SourceProperties

@Autowired Environment env

但是当我的AppController是静态的时,它只是null。当它公开时,spring抛出BeanCreationException(创建名称为'appController'->的bean时出错,但我不知道如何处理)。

我希望你能帮助我。这是我最后的方法...

Application.java

public static void main(String[] args) {
   Login = doLogin();
   Map<String, Object> p = new HashMap<String, Object>();
   p.put("Server", Server);
   p.put("Login", Login)";
}

AppController.java

@Controller
abstract class AppController {

    @Autowired
    Environment env

    public Login Login;

    public AppContoller() {
        //Access env and read Properties-Map and "Login"
        this.Login = .....;
    }
}

DummyController.java

@RestController
public class dummyController extends AppController {
    @RequestMapping("/greeting")
    public dummy greeting(@RequestParam(value="name", defaultValue="World") String name) {
        return this.Login.SessionKey;
    }
}

感谢您的帮助,在此先感谢您。我希望我的想法很明确。

1 个答案:

答案 0 :(得分:1)

您的异常堆栈跟踪:

  

创建名称为'appController'的bean时出错

不可能创建抽象类的对象。如果要在所有控制器之间使用通用功能,可以创建一个抽象类,然后要求每个控制器进行扩展。

public abstract class AbstractResultController {
 // some common functionality

}

请注意,AbstractResultController上没有注释,并且在此之后:

@Controller
public class AppController extends AbstractResultController {

}

This链接将帮助您入门。


编辑:

创建如下所示的文件,以包含用@Configuration注释的登录详细信息

@Configuration
public abstract class Details {

    @Bean(name = "login")
    @Scope("singleton")
    public Login getLogin() {
        Login login = new Login();
        // populate login object as required
        return login
    }
}

现在您可以在任何地方访问此bean /对象,例如:

public static void main(String[] args) {
    AnnotationConfigApplicationContext absContext = new AnnotationConfigApplicationContext(Details.class, Login.class);
    Login login = (Login) absContext.getBean("login");
}

OR

@RestController
public class dummyController  {

   @Autowired
   Login login;

   // Rest of the controller logic
   @RequestMapping("/greeting")
   public dummy greeting(@RequestParam(value="name", defaultValue="World") String name) {
      return this.login.SessionKey;
   }

}