Spring is a famous and popular Java framework that is adopted in many projects and reaches a great success. Now, it is a star in java world and gets support from many famous Java technology providers, such as JBoss and Bea. However, I will say Spring will go to the back scene soon. The reason that I make this predication is that this framework addresses a lot issues in Java programming, but without any major one.
The highlights that Spring attained is IoC (Inversion of Control) and AOP (Aspect oriented Programming). Although Spring provides other function such as transaction management, MVC, and security, its functions are not the best or commonly adopted. For example, MVC is marked as Struts. These two terms are almost identical. You should know what it actually means to Spring.
IoC is brilliant idea, but it is not enough. Spring provides a good method to wire beans together, which can bring bean instances into the scene. However, it does not provide any solution how to orchestra those bean instances working together. It looks like that he is a good movie agent who can find the right actors to the roles, but he does not know how to direct a movie. The director knows and tells what the actor need to act, but not the agent. Thus, the framework is not complete at all. It needs to attach to another application or framework to build a live system. In the EJB world, Spring looses its IoC power. It admits this fact. The absence from EJB filed is fatal, because enterprise solution is the major trend in Java world.
AOP is another highlight of Spring. However, AspectJ provides a fabulous solution to Aspect programming. It provide more flexible and robutst functions than Spring AOP because AspectJ weaves the Aspect concerns during the compile. In contrast, Spring implent Aspect programing by proxy. Such a implementation leads to some limitations. EJB 3 makes this situation even worse. The Interceptor concept provided by EJB 3 will further prevent Spring AOP into EJB world. Interceptor provides a function that enable AOP, such as centralized security service. The deployed resources can be managed through Interceptor configuration.
Accordingly, you can see what issue that Spring actually addressed in multiple layer system development. It is just keep its field as glue between UI and EJB or web services, but only in a role as a good bean factory. A bean that created outside the factory will not get support from Spring. In this layer, the launch of JSF (Java server faces) even can make Struts retired, then how about Spring. Spring will keep its role only in the POJO field and very difficult to extend its work. There is a way may change its fate that it allows bean created outside Spring register to the framework. If Spring does not change to its current strategy, it will go to the back scene even out of our memory soon.