我真的是春天新手,但是还可以。我必须设置一个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;
}
}
感谢您的帮助,在此先感谢您。我希望我的想法很明确。
答案 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;
}
}