我有一个 spring-boot 项目。我以“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 注释进行注入(inject)(Spring 框架基于依赖注入(inject)设计模式)。但是 Spring 注解也有其他含义,我无法详细介绍其中每一个,但例如,您必须考虑 @Bean、@Component、@Controller、@Repository、@Service 等注解的默认范围是 Singleton 。因此,每当您使用这些注释之一注释一个类并且没有定义范围时,您得到的就是在整个应用程序中共享的单例类。其他范围是:
- 单例
- 原型(prototype)
- 请求
- session
- 申请
- 网络套接字
考虑到您的 GenericTree 类,将抽象数据结构类注释为 Spring Bean 是否有意义?可能不是。
所以,是的,当您开发基于 Spring 框架的应用程序时,通常会混合使用 Spring 带注释的类和常规 POJO。
我建议您阅读 Spring 框架文档,了解什么是依赖注入(inject)以及最常用的 Spring 注解的目的和含义。
