编程语言
首页 > 编程语言> > java – Action类可以限定为Singleton吗?

java – Action类可以限定为Singleton吗?

作者:互联网

我的问题不仅仅是动作类可以限定为单例,而且我还想知道哪些是最佳实践.两者都在Struts2和Spring的背景下.控制器和型号的最佳VIEW范围(例如请求或会话).

解决方法:

> Struts2操作由Struts容器管理.它们是ThreadLocal,因此每个请求都有自己的Action的线程安全副本.
>如果您使用Spring通过Struts2-Spring-plugin处理它们,则有多种用法:

>你可以让Struts容器实例化它们,并通过Spring处理它们以进行依赖注入,或者
>你可以让Spring接管并完全负责每个Action的整个生命周期.在第二种情况下:

>如果在Spring XML配置文件中将操作声明为bean,则操作将获得默认的Spring范围,即Singleton(scope =“singleton”).这是危险的,无用的,99.99%的时间并不是你想要的,因为你将失去框架能力的一个基本部分,行动将变成一种类型的servlet,线程 – UNsafe,并且会出现许多问题;
>为了防止这种情况,你可以将scope =“prototype”放在bean声明中,这样可以让Spring在不影响其性质的情况下实例化动作.

>如果您在符合Java EE 6的容器内(例如,Jboss 7,Wildfly 8,TomEE 1.7,Glassfish 3,ecc …),则通过CDI处理上下文和依赖注入.如果需要,可以使用Struts2-CDI-plugin允许CDI处理您的操作并通过@Inject注释注入依赖项(而不是@Autowired注释)

我过去经常使用Spring,然后在发现CDI和CDI插件之后,我已经切换并且从未回头,所以我投票给了n.3

标签:java,spring,spring-mvc,cdi,struts2
来源: https://codeday.me/bug/20190929/1830261.html