【问题标题】:Can I use method of service layer class in non mvc class?我可以在非 mvc 类中使用服务层类的方法吗?
【发布时间】:2015-07-13 12:38:48
【问题描述】:

我想知道我是否可以使用标有@Service 注释的服务层对象并在非 mvc-spring 类中调用其方法之一?

service layer中有一个方法getUsers()调用了Dao层的getUsers()。为了在contoller 中使用它,我必须在服务层实例中添加@Autowired-annotation。但是如果我想在非mvc类中使用类方法getUsers(),我该怎么做呢?

【问题讨论】:

    标签: spring-mvc model-view-controller service-layer


    【解决方案1】:

    为了使用服务,该对象必须是容器管理。也就是说,这个对象的生命周期必须由 Spring 来管理(创建、销毁、初始化……)。

    因此,要在对象中注入服务实例,它也必须是 Spring bean(服务、组件、控制器...)。

    所以,它可能是一个 MVC 对象,但不是必须的。

    另一方面,还有另一种选择:使用注解@Configurable

    具有此注解的对象可以应用程序管理,但 Spring 使用字节码方面可以注入它的依赖项。因此,尽管您使用 new 语句创建对象,但 Spring 会检测此调用并解析所有带注释的依赖项。

    阅读本文了解更多详情:

    http://docs.spring.io/spring/docs/3.0.0.M3/spring-framework-reference/html/ch08s08.html

    【讨论】:

    • 为什么需要容器管理?如果我的应用程序获取了 App 上下文,从应用程序上下文中获取服务 bean 并调用它,它应该仍然可以工作。
    • 是的,当然,但在这种情况下,您的对象是应用程序管理的,因为您负责解决其依赖关系(使用应用程序上下文或您想要的任何东西)。如果对象是容器管理的,spring 负责在创建新实例时解决该对象的依赖关系。
    猜你喜欢
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 2021-01-04
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多