我有一个弹簧启动项目。我以"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 注释的目的和含义。