首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多次使用@Autowired

多次使用@Autowired
EN

Stack Overflow用户
提问于 2016-03-04 18:08:12
回答 3查看 6.6K关注 0票数 7

我对春天很陌生,所以我可能会问一些愚蠢的问题,但无论如何.

我已经构建了Spring 4.0应用程序。

我的设置如下:

控制器>>服务>> DAO

在控制器级别上,我使用了大约4到5个不同的@Autowired变量,如下所示

代码语言:javascript
复制
@Autowired
private ClientService clientService;
@Autowired
private CommentService commentService;
@Autowired
private SearchService searchService;

在服务一级- Autowire也有几个DAO

代码语言:javascript
复制
@Autowired
SearchDAO searchDAO;

@Autowired
private ActivityDAO activityDAO;

@Autowired
private UserService userService;

我有大约10个不同的控制器,其中大多数是@Autowire相同的服务,所以我的问题是可以吗?

是否可以根据需要多次使用@Autowire,还是会带来过多的内存使用量?它会对我的申请产生其他影响吗?

我使用Spring4.0+ hibernate JPA

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-04 18:46:11

@Autowired没有问题。

Autowired在Spring上下文中查找bean并将其赋值给变量。它只是引用相同的Service/Dao bean对象。它不会造成重复。

但是,将这么多的对象注入一个类是一个类做了很多事情的标志。尽可能检查将类重构为多个类的可能性。

票数 6
EN

Stack Overflow用户

发布于 2016-03-04 21:19:56

答案和一些评论已经回答了你的记忆问题。关于你的另一个问题

我有大约10个不同的控制器,其中大多数都是相同的服务,所以我的问题是可以吗?

从设计的角度来看,这听起来很糟糕。Ali Deghani提到了一项单一的责任原则。事实上,如果您要将服务从自动装配作为字段转移到通过构造函数自动装配,它会立即提示您是否应该考虑重构,除其他好处外

票数 1
EN

Stack Overflow用户

发布于 2016-03-04 19:03:20

我有大约10个不同的控制器,其中大多数都是相同的服务,所以我的问题是可以吗?

在控制器之间重用服务是可以的。也就是说,我不愿在每个控制器中使用更多的服务,并重构代码,这样控制器就不会“太胖”了。通常,我努力将控制器保持为HTTP世界和Java世界之间的映射层,并将所有业务逻辑向下推到服务层。

缺省情况下,Spring将使用singelton范围创建bean,这意味着如果您在多个控制器中自动创建同一个bean,它们将共享同一个bean实例。

是否可以按我需要的次数使用@Autowire,还是会带来过多的内存使用量?它会对我的申请产生其他影响吗?

自动装配本身不需要太多内存,它只是对Java对象实例的引用。通常,Spring不包含任何状态(它们将其委托给缓存和数据库等组件),因此,除非您做了一些异常的事情,否则您不必担心内存的使用。

需要注意的一件事是,您应该避免在bean之间创建循环依赖关系。由于您正在使用字段注入,Spring将在应用程序初始化期间抛出一个异常,并且需要重构应用程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35803095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档