我对春天很陌生,所以我可能会问一些愚蠢的问题,但无论如何.
我已经构建了Spring 4.0应用程序。
我的设置如下:
控制器>>服务>> DAO
在控制器级别上,我使用了大约4到5个不同的@Autowired变量,如下所示
@Autowired
private ClientService clientService;
@Autowired
private CommentService commentService;
@Autowired
private SearchService searchService;在服务一级- Autowire也有几个DAO
@Autowired
SearchDAO searchDAO;
@Autowired
private ActivityDAO activityDAO;
@Autowired
private UserService userService;我有大约10个不同的控制器,其中大多数是@Autowire相同的服务,所以我的问题是可以吗?
是否可以根据需要多次使用@Autowire,还是会带来过多的内存使用量?它会对我的申请产生其他影响吗?
我使用Spring4.0+ hibernate JPA
发布于 2016-03-04 18:46:11
@Autowired没有问题。
Autowired在Spring上下文中查找bean并将其赋值给变量。它只是引用相同的Service/Dao bean对象。它不会造成重复。
但是,将这么多的对象注入一个类是一个类做了很多事情的标志。尽可能检查将类重构为多个类的可能性。
发布于 2016-03-04 21:19:56
答案和一些评论已经回答了你的记忆问题。关于你的另一个问题
我有大约10个不同的控制器,其中大多数都是相同的服务,所以我的问题是可以吗?
从设计的角度来看,这听起来很糟糕。Ali Deghani提到了一项单一的责任原则。事实上,如果您要将服务从自动装配作为字段转移到通过构造函数自动装配,它会立即提示您是否应该考虑重构,除其他好处外
发布于 2016-03-04 19:03:20
我有大约10个不同的控制器,其中大多数都是相同的服务,所以我的问题是可以吗?
在控制器之间重用服务是可以的。也就是说,我不愿在每个控制器中使用更多的服务,并重构代码,这样控制器就不会“太胖”了。通常,我努力将控制器保持为HTTP世界和Java世界之间的映射层,并将所有业务逻辑向下推到服务层。
缺省情况下,Spring将使用singelton范围创建bean,这意味着如果您在多个控制器中自动创建同一个bean,它们将共享同一个bean实例。
是否可以按我需要的次数使用@Autowire,还是会带来过多的内存使用量?它会对我的申请产生其他影响吗?
自动装配本身不需要太多内存,它只是对Java对象实例的引用。通常,Spring不包含任何状态(它们将其委托给缓存和数据库等组件),因此,除非您做了一些异常的事情,否则您不必担心内存的使用。
需要注意的一件事是,您应该避免在bean之间创建循环依赖关系。由于您正在使用字段注入,Spring将在应用程序初始化期间抛出一个异常,并且需要重构应用程序。
https://stackoverflow.com/questions/35803095
复制相似问题