【发布时间】:2017-05-20 19:11:00
【问题描述】:
我想澄清一个疑问。我正在创建自己的服务类来操作数据。我应该在类级别(在 MVCPortlet 中)创建此服务实例还是在我的 processAction/doView 方法中创建新实例。 使用实例级别时是否存在线程安全问题。
Fg:
public class MvcCycle extends MVCPortlet {
int counter;
LdapService ldapservice;
@Override
public void init() throws PortletException {
counter=0;
ldapservice = new LdapService(); // Option 1
super.init();
}
@Override
public void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException {
// TODO Auto-generated method stub
System.out.println("Counter hits "+ ++counter);
//
LdapService ldapservice = new LdapService(); // Option 2
ldapservice.authUser(request.getParameter("email"));
// -- some code--
super.doView(renderRequest, renderResponse);
}
@Override
public void destroy() {
System.out.println("Last counter "+counter);
counter=0;
super.destroy();
}
}
class LdapService{
public boolean authUser(String email){
if(//logic to authenticate user){
return true;
}else{
return false;
}
}
}
在这里,我的 ldapservice 只启动一次。因此,当多次点击时。选项 1 或选项 2 哪个代码在这个时候是有益的。
希望我已经解决了我的问题。
【问题讨论】:
-
为什么不使用服务构建器定义服务类并根据您的实现进行自定义。
-
+1 使用 ServiceBuilder。另一种选择是删除它:您的示例代码根本没有使用它,因此它毫无意义。
-
您好,此服务不适用于数据库交互。它将用于数据操作。