开发者

What are pros and cons of using Spring in Swing based frontend

we have a frontend application that that uses Swing. We use Spring framework, but currently it is used just to autowire few beans...

What are reasonable next steps 开发者_开发百科to use Spring more often? Is it worth for non web application?

What would be advantages and disadvantages?


The advantages of using Spring (or any other dependency-injection) framework, is that you get a (hopefully) loosely coupled system, i.e you classes does not create instances of their collaborators, so you can easily change the implementation.

This is widely known as the Inversion-of-control principle (IoC, also the I in SOLID), and this is a good principle to follow. This means that spring is not limited to web applications, but can be used in any application that want to use an IoC-container (which is basically what spring-core is).

Disadvantages: This really depends on how you look at things. There is more code (you have to define a entry-point for the injected collaborators), but that also makes the code more testable (the entry-points are seams which you can use to inject mocks and stubs in testing).

Also, you can't look at the code and immediately see which implementation of the collaborators that are used. But that also makes for good code, since you depend on interfaces, not implementations.

You get more config: either in an xml-file (old-style spring), or with annotations. Up until recently you had to rely on non-standard spring annotations to inject (@Autowired) resources, but now you can use the standard java dependency injection annotations, which means that you can switch out spring as your IoC-container without changing your code.

There are probably alot more advantages and disadvantages to using spring in your application, but this should get you started on deciding if using Dependency Inversion is a good thing for your application

More to the point of your question about Swing and Spring. In an application I have been working on we have been using spring to wire up the whole application. The different dialogs get their logic injected (no application logic should (in my opinion) be located together with gui logic). We are using JPA/hibernate as the database-layer, so we use spring spring to create and inject the entitymanager to our DAOs, and set up transactional settings.


I've written swing UI's that are backed by spring.

cons

  • the startup can be slower but you have to have a large app for that to happen. and a splashscreen is a good idea in those situations.
  • its easy to "overbean" or over-zealously make everything a bean, which gets messy.

pros

spring works fine behind a GUI.

it provides a lot of services you can use

  • the obvious dependency injection and decoupling
  • a global event system, simpifying some of your own event listeners, for events that will only ever be fired by one source
  • resource accessing
  • database access is eays in 2 tier apps
  • rpc for 3 tier apps is easy

There are other services the spring application context provides, but that I haven't used.

If you go this direction, also look into the java-based configuration for spring, which is new in 3.0. I find that helpful as well, as it makes my spring configuration type-safe.


One disadvantage of using Spring in a Swing application is that Spring DI will make startup slower.


well one would be , if you ever decide to migrate to a web app , all you need ( well almost) to change would be the views. That's the beauty of MVC applications.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜