Struts is intended to be an implementation of the
Front Controller Pattern, thought there is a little more to it than that. Spring brings a lot more features to the table. For example, it makes it easy to "inject" a feature across an entire application. For example, say you needed to send out a log message before every DAO call. If your application were properly designed, Spring can do that. This ability to inject code also comes in handy with
testing. Some developers also like to move the logic of the application out of the code and into the configuration. This is useful if you have an application that has a bunch of logical elements that are reused in different combinations and sequences. Spring makes it easy to do that. Spring also has its own security model, so if you aren't happy with the standard
JEE security you have the option to use it.
That said, you can always use Spring with Struts 2, and in fact, it has a plugin to make Spring integration easy bundled with the distribution.
Rather than "developer preference", I would say
you should look at the requirements of your application and see what framework (and there are many) best facilitate your building your application.