如何将属性值从一个方法用于另一个方法

时间:2013-02-06 10:36:29

标签: java spring spring-mvc

我有一个家庭控制器,其中我有两种方法

    @RequestMapping(value = "/mypage.te", method = RequestMethod.GET)
    public String mypage1(Locale locale, Model model){

        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        String name = auth.getName(); //get logged in username 
        model.addAttribute("username", name);       
        model.addAttribute("customGroup",grpDao.fetchCustomGroup());        
        model.addAttribute("serverTime", formattedDate);
        model.addAttribute("username", name);

        return "mypage";
}

这个方法实际上我从Dao类调用grpDao.fetchCustomGroup()方法,该类执行本机查询并获​​取数据并返回,并保存在customGroup中。

现在相同的fetchcustomGroup()方法将用于另一种方法,即

@RequestMapping(value = "/manageGrps.te", method = RequestMethod.GET)
public String man_grp_connections(@RequestParam("id") Integer groupId,@RequestParam("name") String groupName, Model model) {
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    String name = auth.getName();
    System.out.println("I am in the fetchCustomGroup controller");  
    int profileid=grpDao.getProfileId(name);        
    //model.addAttribute("customGroup",grpDao.fetchCustomGroup());
    model.addAttribute("memberList",grpDao.fetchGroupMembers(groupId,profileid));
    model.addAttribute("groupid",groupId);
    model.addAttribute("profileid",profileid);

    model.addAttribute("groupName",groupName);
    System.out.println("groupid="+groupId);
    System.out.println("groupName="+groupName);
    return "manageGrps";
}

所以不要在两个方法中调用fetchCustomGroup(),而只想在一个方法中调用它,并在主控制器的两个方法中使用结果。

那么如何在另一种方法中使用customGroup来使用fetchCustomGroup()

的结果

1 个答案:

答案 0 :(得分:0)

我认为你想要的是避免两次执行查询。这可以通过不同方式完成。最简单的方法是将响应分配给控制器中的变量,然后使用getter而不是dao。控制器默认为单例。类似的东西:

private Foo customGroup;

private synchronized Foo getCustomGroup() {
    if(customGroup == null) {
        customGroup = grpDao.fetchCustomGroup();
    } 
    return customGroup;
}

然后使用getCustomGroup()代替grpDao.fetchCustomGroup()

我不知道你使用的持久性,但使用缓存也是一个好主意,以避免执行两次查询。