在下面的场景中,有一个通用控制器。我正在做@PostConstruct来实例化IfCompleted类。但是IfCompleted对象是作为类变量创建的。所以fortify投掷单身成员字段。避免这种情况的解决方案是什么?
GenericController.java
@Controller
public class GenericController{
@Autowired
public UserService service;
@Autowired
public webRoot webroot;
public IfCompleted ifCompleted;
@PostContstruct
public void show(){
ifCompleted = new IfCompleted(webroot);
}
.....
.....
}
答案 0 :(得分:0)
问题中的例子基本上是将控件从Spring中取出,这通常不是一件好事。 IfCompleted
应该是一个bean,其生命周期和布线由Spring控制。
假设您不能或不希望使用XML或基于Java的Container配置来定义具有IfCompleted
约束的单@DependsOn
,现在可以创建一个bean定义例如,如果你只能依靠组件扫描,也来自@Component
。
用于更复杂生命周期管理的其他有用工具是org.springframework.beans.factory.InitializingBean
和org.springframework.beans.factory.BeanFactoryAware
接口。
简短/快速回答可能只是将成员定义为static
,但我不熟悉Fortify的静态分析规则。< / p>
答案 1 :(得分:0)
感谢您的建议。我通过删除@PostConstruct块和@Autowired for WebRoot声明来解决它。我在Spring上下文中将WebRoot注入为IfCompleted的构造函数参数。
@Controller public class GenericController {
@Autowired 公共UserService服务;
@Autowired public IfCompleted ifCompleted;