将Controller1的调用方法转换为Spring中Controller2的另一种方法

时间:2015-03-10 08:19:19

标签: java spring spring-mvc model-view-controller spring-security

我做了很多事情来找到我的问题,但我不能抱歉如果这个问题已经在堆栈上溢出,因为我还没有找到它。

首先让我们来看看代码

@Controller
public class Controller1 {
    @RequestMapping(value = "URL", method = RequestMethod.GET)
    public ModelAndView methodHandler(Parameters) { 

    }

    public int calculation(int i){
        //Some Calcucation
        return i;
    }
}

和第二个控制器是

@Controller
public class Controller2 {
    @RequestMapping(value = "URL", method = RequestMethod.GET)
    public ModelAndView methodHandler(Parameters) { 
        //In this I want to call the calculation(1) method of controller1.
    }
}

我的问题是,有没有办法将controler1的calculate()方法调用到controller2中。但请记住,我不想在controller1中使方法静态。无论如何调用它而不使其静态?

由于 亚西尔

2 个答案:

答案 0 :(得分:1)

你的控制器不应该互相打电话。如果两个控制器都需要使用某个逻辑,那么将它放入单独的bean中会好得多,这将由两个控制器使用。然后你可以简单地将那个bean注入到必要的控制器中。尽量不要将任何业务逻辑放到控制器上,尝试将其放到专门的类中,如果可能的话,它将是Web独立的,并且将接受与Web无关的业务数据,如用户电子邮件,帐号等。没有http请求或响应。这样,具有实际逻辑的类可以重复使用,并且可以更容易地进行单元测试。此外,如果有状态,它应该包含在控制器外的类中。控制器应该是无状态的,根本不包含任何状态。

当使用MVC模式并且您决定将逻辑放在何处时,您应该将业务逻辑分为模型和控制器,您应该只放置有关用户交互的逻辑as explained in this stack overflow post

答案 1 :(得分:1)

您应该在配置文件中创建服务bean(或使用其中一个注释)并将其注入控制器。例如()

@Configuration
public class MyConfig {

    @Bean
    public MyService myService(){
        return new MyService();
    }

}


@Controller
public class Controller1 {

    @Autowire
    private MyService myService;

    @RequestMapping(value = "URL", method = RequestMethod.GET)
    public ModelAndView First(Parameters) { 
        myService.calculation();
    }
}

@Controller
public class Controller2 {

    @Autowire
    private MyBean myBean;

    @RequestMapping(value = "URL", method = RequestMethod.GET)
    public ModelAndView First(Parameters) { 
        myService.calculation();
    }
}