我是Spring Framework的新手,我遇到了@Required与Java配置应用程序相结合理解注释的问题.
这是一个例子.
配置文件中
@Configuration
public class AppConfig {
@Bean
public Movie movieA() {
return new Movie();
}
@Bean
public MovieHolder holder() {
return new MovieHolder();
}
}
Run Code Online (Sandbox Code Playgroud)
MovieHolder.java
public class MovieHolder {
private Movie movie;
public Movie getMovie() {
return movie;
}
@Required
public void setMovie(Movie movie) {
this.movie = movie;
}
}
Run Code Online (Sandbox Code Playgroud)
上下文初始化
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MovieHolder holder = (MovieHolder) context.getBean("holder");
System.out.println("movie: " + holder.getMovie());
Run Code Online (Sandbox Code Playgroud)
据我所知,@Required注释的文档,应该会出现异常,因为电影不是直接设置或通过自动装配.而不是输出movie: null.
我究竟做错了什么?或者这不正确使用@Required注释?
我目前正在明斯特大学准备我的学士学位论文。我计划自动识别 Spring 配置中的典型问题。市场上有很多工具可以执行静态代码分析以查找错误或问题。这些显然无法检测仅在运行时出现的问题。我将分析一个 Spring 应用程序的 ApplicationContext 并通过使用反射和 bean 图的分析来查找错误配置。
示例: 一个简单的示例是,如果有人想通过使用注释来使类或方法事务安全。他通常会在类或方法上方添加一个@Transactional-tag,但是如果应用程序没有正确配置并且没有注册到ApplicationContext 的事务管理器,它观察注解,那么该标记将被忽略。不会出现错误信息,这也是目前很难发现这类问题的原因。
问题: 使用弹簧机制的错误配置导致的最常见错误或架构故障是哪些,可以通过动态分析检测到?是否有任何项目参与做类似的事情?
PS在我的论文过程中,我将开发一个可以检测此类问题的原型,并在以后将其开源。:)