举个例子,比如在一个Action类中有个login方法,调用的loginServcice这个类
第一种方式,将LoginService定义在方法外面,全局都可以访问。public class LoginAction extends DispatchAction { private LoginService loginService = LoginFactory.getInstance().getLoginService(); public void login(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
loginService.login();
} public void logOut(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
loginService.logOut();
}}第二种方式,将LoginService定义在方法里面,只能该方法访问。下一个方法访问的话,要再定义这个LoginService类。public class LoginAction extends DispatchAction { public void login(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
LoginService loginService = LoginFactory.getInstance().getLoginService();
loginService.login();
} public void login(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
LoginService loginService = LoginFactory.getInstance().getLoginService();
loginService.logOut();
}
}
这两种方式有什么区别呢??一直忽略了这个问题
第一种方式,将LoginService定义在方法外面,全局都可以访问。public class LoginAction extends DispatchAction { private LoginService loginService = LoginFactory.getInstance().getLoginService(); public void login(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
loginService.login();
} public void logOut(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
loginService.logOut();
}}第二种方式,将LoginService定义在方法里面,只能该方法访问。下一个方法访问的话,要再定义这个LoginService类。public class LoginAction extends DispatchAction { public void login(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
LoginService loginService = LoginFactory.getInstance().getLoginService();
loginService.login();
} public void login(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
LoginService loginService = LoginFactory.getInstance().getLoginService();
loginService.logOut();
}
}
这两种方式有什么区别呢??一直忽略了这个问题
了解的就这些 错了拍砖
全局变量与局部变量全局变量 不用每次login都生成一个LoginService实体
局部变量 每次login都生成一个LoginService实体不仅仅是代码量的问题,内存使用量也增大。建议使用全局变量
所以loginService.login()和loginService.logOut()都共享的同一个对象,都对此对象进行login和logOut操作。
第二种情况:loginService引用的是两个不同的对象,所以你是对两个对象进行login和logOut操作。
这样会导致潜在的线程不安全。
建议第一种。
当然如果是单例模式
那两者是一样的。
定义在方法里面,loginService每个请求上都获取一次,如果不是单根模式,则大家无需考虑线程并发问题,且每次获取的对象可以不同。问题是对性能是一个影响。
外面可以定义全局和静态变量 以及开放的状态也是不一样的(private project public)