举个例子,比如在一个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();
}
}
这两种方式有什么区别呢??一直忽略了这个问题

解决方案 »

  1.   

    区别很大  主要是数据共享的问题  如果你的LoginAction 配置的是单例   那么在第一种方式中 所有的访问都会使用同一个LoginService 而在第二种方式中 每一个访问的实例都会使用不同的LoginService(新的实例)  如果配置的是多例  那么就不存在共享LoginAction 除非你这样定义private static LoginService loginService = LoginFactory.getInstance().getLoginService(); 那么所有实例都会共享LoginService    再有一个区别就是你写在上面减少了代码量  写在每一个方法中写的代码就多多了  
    了解的就这些  错了拍砖
      

  2.   

    没啥特别的,java的基础
    全局变量与局部变量全局变量 不用每次login都生成一个LoginService实体
    局部变量 每次login都生成一个LoginService实体不仅仅是代码量的问题,内存使用量也增大。建议使用全局变量
      

  3.   

    第一种情况:就一个loginService,他引用的就仅仅一个对象,
    所以loginService.login()和loginService.logOut()都共享的同一个对象,都对此对象进行login和logOut操作。
    第二种情况:loginService引用的是两个不同的对象,所以你是对两个对象进行login和logOut操作。
    这样会导致潜在的线程不安全。
    建议第一种。
    当然如果是单例模式
    那两者是一样的。
      

  4.   

    诶,,楼主。你的这个登录LoginFactory。。这个还用了工厂的啊。。挺牛逼的啊。。教教我罗。。
      

  5.   

    定义在外面,loginService只初始化一次,且大家共享。如果需要loginService会变,就不行了。同时也要加倍注意线程并发问题。
    定义在方法里面,loginService每个请求上都获取一次,如果不是单根模式,则大家无需考虑线程并发问题,且每次获取的对象可以不同。问题是对性能是一个影响。
      

  6.   

    那么我Service中,要调用DAO,要建立数据库的连接,建立Session,这样的话,有区别了么?
      

  7.   

    方法体内 可以定义的变量都是局部的。
    外面可以定义全局和静态变量 以及开放的状态也是不一样的(private project public)