@PostConstruct Singleton成员字段

时间:2014-09-14 07:31:35

标签: spring annotations fortify

在下面的场景中,有一个通用控制器。我正在做@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);
}

.....
.....
}

2 个答案:

答案 0 :(得分:0)

问题中的例子基本上是将控件从Spring中取出,这通常不是一件好事。 IfCompleted应该是一个bean,其生命周期和布线由Spring控制。

假设您不能或不希望使用XML或基于Java的Container配置来定义具有IfCompleted约束的单@DependsOn,现在可以创建一个bean定义例如,如果你只能依靠组件扫描,也来自@Component

用于更复杂生命周期管理的其他有用工具是org.springframework.beans.factory.InitializingBeanorg.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;