I'm very new to spring, so I might ask silly question but anyway...
I have built Spring MVC 4.0 application.
my settings are like this:
Controller >> Service >> DAO
in controller level I use about 4 to 5 different @Autowired
variables like this
@Autowired
private ClientService clientService;
@Autowired
private CommentService commentService;
@Autowired
private SearchService searchService;
In Service level I Autowire also several DAOs
@Autowired
SearchDAO searchDAO;
@Autowired
private ActivityDAO activityDAO;
@Autowired
private UserService userService;
I have about 10 different controllers and in majority of them I @Autowire
same services, So my question is this ok or not?
Is is ok to use @Autowire
as many times as I need or will bring too much memory usage? Will it have some other effects on my application?
I use Spring 4.0 + hibernate JPA
答案 0 :(得分:4)
@Autowired
没有问题。
Autowired在Spring上下文中查找bean并分配给变量。它只是引用Service / Dao bean的同一个对象。它不会创建重复。
但是将一个对象注入一个类是一个类做了很多的标志。检查尽可能将类重构为多个类的可能性。
答案 1 :(得分:1)
答案和一些评论已经回答了你的记忆问题。关于你的另一个问题
我有大约10个不同的控制器,其中大多数是我 @Autowire相同的服务,所以我的问题是否可以?
从设计角度来看,这听起来非常糟糕。 Ali Deghani提到了单一责任原则。事实上,如果您将服务从自动装配作为字段移动到通过构造函数自动装配,它会立即暗示您是否应该考虑重构,amongst other benefits
答案 2 :(得分:0)
我有大约10个不同的控制器,其中大多数我@Autowire相同的服务,所以我的问题是否可以?
可以在控制器之间重用服务。也就是说,我会犹豫在每个控制器中使用多个服务并重构代码,以便控制器不会“变得太胖”。通常,我努力将我的控制器作为HTTP世界和Java世界之间的映射层,并将所有业务逻辑下推到服务层。
Spring默认会创建带有singelton scope的bean,这意味着如果你在多个控制器中自动装配相同的bean,它们将共享同一个bean实例。
可以根据需要多次使用@Autowire或者会带来太多的内存使用量吗?它会对我的应用程序产生其他影响吗?
自动装配本身不需要太多内存,它只是对Java对象实例的引用。通常,Spring bean不包含任何状态(它们将其委托给组件,如缓存和数据库),所以除非你特别做某些事情,否则你不必担心内存使用。
要注意的一件事是,你应该避免在bean之间创建循环依赖关系。由于您正在使用字段注入,因此Spring将在应用程序初始化期间抛出异常,您需要重构应用程序。