在 spring 框架中使用非注释类(bean)可以吗?



我有一个弹簧启动项目。我以"spring"方式使用它的一些类,这意味着它们由"@Service","@Repository","@Autowired"注释。同时,我有很多类,它们只以普通的Java方式使用,这意味着没有任何Spring注释,它们是以构造函数中的标准方式创建的。

例如,其中一个未带注释的类是:

public class GenericTree<T>
{
private GenericTreeNode<T> root;
public GenericTree ()
{
root = null;
}
public GenericTreeNode<T> getRoot ()
{
return this.root;
}
public void setRoot (GenericTreeNode<T> root)
{
this.root = root;
}
...
}

混合使用或不带 Spring 注释的类是可以的还是正常的?也许,我可以使用 Spring 的注释标记将所有未注释的类转换为注释类。这真的有益还是有必要?

顺便说一句,我的应用程序的主要逻辑和功能不是以 Web 为中心的,尽管它们是作为 Spring 项目创建的。我在 Spring 中创建的原因是我想为我的界面提供一个 restful 服务,以便我可以在开发中的浏览器中轻松进行测试,其他人可以将其与 Restful 服务一起使用。

是的,没关系。

请记住,注释不是 Spring 独有的。注解是在 Java 5 中引入的,它们只是 Java 代码的元数据。此元数据可用于:

  • 编译时
  • 构建时
  • 运行

您甚至可以创建自己的自定义注释,并使用它们注释代码。

Spring 框架带有一些注释,每个注释都有其用途,但这并不意味着在使用此框架时必须使用 Spring 注释来注释所有类。

当您将类注释为 Spring Bean 时,它们将成为 Spring 应用程序上下文的一部分,从而使它们可以使用@Autowired注释进行注入(Spring 框架基于依赖注入设计模式(。但是 Spring 注释还有其他含义,我无法详细介绍它们中的每一个,但例如,您必须考虑注释的默认范围,如 @Bean、@Component、@Controller、@Repository@Service是 Singleton。因此,每当使用这些注释之一对类进行注释并且没有定义作用域时,您得到的是一个在整个应用程序中共享的单例类。其他范围包括:

  • 单身 人士
  • 原型
  • 请求
  • 会期
  • 应用
  • 网络套接字

考虑到你的GenericTree类,将抽象数据结构类注释为Spring Bean是否有意义?应该不会。

所以,是的,当你开发一个基于Spring框架的应用程序时,正常的事情是混合使用Spring注释类和常规POJO。

我建议您阅读 Spring 框架文档,了解什么是依赖注入以及最常用的 Spring 注释的目的和含义。

最新更新