0

在 Spring MVC 中从 Controller 访问服务层的最佳方法是什么?我正在为 SpringMVC 使用注释。

早些时候,我每次都通过在控制器的每个方法中调用 ClassPathXMLApplicationContext(spring-bean-name.xml) 从 bean 工厂获取 bean。

从解决方案到问题从 Spring MVC 中的自定义控制器访问服务层,我知道服务 bean 必须是自动装配的。

但是,假设一个控制器访问多个服务,我们是否必须注入多个 bean?但这不是一个好的做法,因为我们只能在控制器中的 1-2 种方法中使用特定服务,并且将其设为类变量而不是函数变量并不好。

4

3 回答 3

3

你是对的,你需要自动装配你打算使用的服务。不用担心类变量与本地(函数)变量,这就是 DI 模式的实现方式。

在最严格的 OO 设计意义上,您有一点不应该在类级别上声明变量,除非它们涉及描述对象的状态。然而,DI(依赖注入)是一种非常成熟的模式,无论有多少方法实际使用该服务,开发人员都不会反对将服务 bean 作为自动装配的类成员。

附带说明一下,new ClassPathXMLApplicationContext("spring-bean-name.xml")在每种方法中都做绝对是 100%错误的方法。这涉及每次执行该方法时创建一个新的 bean-factory 和 bean-context ,这是一个很大的开销并且完全没有必要。bean-factory 应该创建一次(如果您在 servlet 引擎环境中,使用 DispatcherServlet 或 ContextLoaderListener)。

于 2012-11-20T08:20:56.480 回答
0

您可以拥有一个实例化 bean 工厂的静态类,然后使用该静态类的自定义静态 getBean 方法

static class SpringConfig()
{
    private static ApplicationContext ctx = null;
    static
    {
        ctx=new ClassPathXmlApplicationContext("context.xml");
    }

    public static Object getBean(String beanName)
    {
        return ctx.getBean(beanName);
    }
}
于 2013-02-11T12:31:55.137 回答
0

这就是为什么您必须尝试将所有使用相同依赖项的方法保持在一起,这是低耦合的。不好的做法是不将您的依赖项作为全局变量注入。不好的做法是不要对方法进行分组以减少类耦合。

于 2015-12-04T19:59:10.923 回答