@Spring3.0中的自动连线——创建静态bean?
我一定是用错了@Autowired,但我不知道怎么用。这是一个Spring3.0门户MVC应用程序 服务本身不是基于spring的,而是自动生成的。有一个围绕服务编写的impl,提供一些自定义功能-这些类是自动连接的 我遇到的问题是,我的自动连线类在内部似乎被视为静态的。因此,此代码不是线程安全的 控制器类:@Spring3.0中的自动连线——创建静态bean?,spring,autowired,Spring,Autowired,我一定是用错了@Autowired,但我不知道怎么用。这是一个Spring3.0门户MVC应用程序 服务本身不是基于spring的,而是自动生成的。有一个围绕服务编写的impl,提供一些自定义功能-这些类是自动连接的 我遇到的问题是,我的自动连线类在内部似乎被视为静态的。因此,此代码不是线程安全的 控制器类: @Controller @RequestMapping("VIEW") @SessionAttributes(value={"shoppingCartCommonBean"}) publi
@Controller
@RequestMapping("VIEW")
@SessionAttributes(value={"shoppingCartCommonBean"})
public class ShoppingCartAndOrderScreenHandler
{
@Autowired
AbstractServiceImpl releaseOrderService;
. . .
@ActionMapping(value = "SubmitOrder")
public void submitOrder(Model model, PortletRequest request) {
try {
ReleaseOrderContract contract = new ReleaseOrderContract();
/* Initialize contract values from request */
releaseOrderService.setServiceRequest(contract);
logger.debug("ReleaseOrderImpl Hash: " +
releaseOrderService.hashCode());
releaseOrderService.invoke();
}
. . . .
}
}
其中,自动连线在springconfig.xml中声明为
<beans xmlns="http://www.springframework.org/schema/beans" . . . >
<context:component-scan
base-package="com.marchon.orderentry.shoppingcartandorder.requesthandler" />
. . . .
<bean class="com.marchon.orderentry.serviceimpls.ReleaseOrderServiceImpl"
id="releaseOrderService" />
. . . .
</beans>
我原以为自动连接会为控制器类的每个实例创建bean的副本。但事实并非如此。我不明白什么
它是自动连接的并不相关。SpringBean默认为单例。如果您需要releaseOrderService不是单例服务,那么需要适当地设置bean范围。看
[ebContainer : 1] [ShoppingCartAndOrderScreenHandler . 208] DEBUG - ReleaseOrderImpl Hash: 1385321106
[ebContainer : 3] [ShoppingCartAndOrderScreenHandler . 208] DEBUG - ReleaseOrderImpl Hash: 1385321106
[ebContainer : 0] [ShoppingCartAndOrderScreenHandler . 208] DEBUG - ReleaseOrderImpl Hash: 1385321106
<bean class="com.marchon.orderentry.serviceimpls.ReleaseOrderServiceImpl"
id="releaseOrderService"
scope="prototype" />