私は春4.1でアプリケーションを開発しています。私は、春のControllers/Beanはスレッドセーフではないことを知っています。すなわち:シングルトン。つまり、コントローラの同じインスタンスが、複数の同時リクエストを処理するために使用されます。ここまで私は明らかです。コントローラクラスに@Scope("prototype")
またはrequest
を明示的に設定する必要があることを確認しますか?私はStackOverflowの以前の記事で、スコープがリクエスト/プロトタイプとして設定されていなくても、@RequestParam
が渡されたか、メソッドの引数に関連付けられた@ModelAttribute
に基づいてSpringコンテナが個々のリクエストを個別に処理できるようになりました。私のアプリのコントローラはスレッドセーフですか? Spring 4.1
だから私は確認したい私の次のコードは、同時に複数の要求を処理しても安全ですか?
@Controller
public class LogonController {
/** Logger for this class and subclasses */
protected final Log logger = LogFactory.getLog(getClass());
@Autowired
SimpleProductManager productManager;
@Autowired
LoginValidator validator;
@RequestMapping("logon")
public String renderForm(@ModelAttribute("employee") Logon employeeVO)
{
return "logon";
}
@RequestMapping(value="Welcome", method = RequestMethod.POST)
public ModelAndView submitForm(@ModelAttribute("employee") Logon employeeVO,
BindingResult result)
{
//Check validation errors
validator.validate(employeeVO, result);
if (result.hasErrors()) {
return new ModelAndView("logon");
}
if(!productManager.chkUserValidation(employeeVO.getUsername(), employeeVO.getPassword())){
return new ModelAndView("logon");
}
ModelAndView model = new ModelAndView("Welcome");
return model ;
}
}
また、別の疑問があります。 私は使用しているのでSimpleProductManager productManager;
app-servlet.xml
のbean宣言にscope="prototype
を指定する必要がありますか?
は私configuration.xmlのバリデータのシングルトン単一のインスタンスなので
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource"><ref bean="dataSource"/></property>
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
</bean>
<bean id="productManager" class="com.BlueClouds.service.SimpleProductManager" >
<property name="productDao" ref="productDao"/>
</bean>
<bean id="productDao" class="com.BlueClouds.dao.HbmProductDao">
<property name="sessionFactory"><ref bean="mySessionFactory"/></property>
</bean>
<bean id="loginValidator" class="com.BlueClouds.service.LoginValidator" >
</bean>
が、そのために、すべての要求の間で共有されている私は、Beanの構成XMLでscope=request
を追加する必要がありますか、私はする必要がありますか同期ブロック内のサラウンドvalidate()
?お知らせ下さい。
ありがとうございました。同じ時間に、:(ArrayListの例)
なぜあなたは限り、あなたはそれらのクラスの状態を保存しないよう... singleton' 'など、他の何かを必要とするでしょう(そして、あなたがすべきではありません!)その後、何あなたは別のスコープを必要としません。あなたが他のクラスで何をするかに応じて、コントローラがスレッドセーフであれば可能です。 –