Is Spring's @Autowired a huge performance issu

2019-04-07 23:12发布

问题:

I have a project that has... I dunno... 200-300 daos/services/controllers and I use @Autowired to wire everything together rather than specify everything in the applicationContext.xml.

My question is, how much of a performance impact does this have on my startup times? Would it be worth it to remove all of the @Autowired annotations and actually wire this application up manually via the applicationContext.xml?

From an architectural point of view, I like @Autowired. I don't want to add another layer of complexity by using the xml file - it adds no value as far as I am concerned. But if this sort of thing is adding 10 seconds to my container's load time, I may consider it. If the cost is 100 milliseconds, then I'll leave it as it is.

Thanks

回答1:

Practically the same. Component scanning is a bit more expensive (when you scan for @Service, @Component), but, as you said, it is startup-time - it happens only once. And on a moderate machine it starts pretty quickly even with annotations.

Generally, I wouldn't abandon the approach just because it adds a bit of startup time. And I can assure you it is nothing significant (working on a bigger project than your right now)



回答2:

There is an interesting comment by @Masterhard in Spring @Autowired usage:

We are switching from @Autowire back to XML configuration in our big project. The problem is very low bootstrap performance. Autowiring scanner loads all classes from autowiring search classpath, so, lots of classes are loaded eagerly during Spring initialization.

Also see e.g. SPR-6870.

However! Autowiring using annotations is so convenient that I would think twice before switching back to XML. Unless the startup time is really an issue in your project and you can prove that it's the CLASSPATH scanning that causes it, stay with annotations. Also remember that Java EE also moves towards annotations.

P.S.: Parsing thousands of lines of XML also introduces some overhead.