I'm not going to give you a detailed explanation of each class, but the general concept is this:
JPA is an standard only, just as Java EE is a standard only. In order to make both work, you must have an implementation of that standard or API.
For example, the authors of the Java EE standard didn't actually write an application server. They provided a standard for writing application servers. IBM, BEA, RedHat and others then created WebSphere, WebLogic, JBoss, etc. all of which implement the Java EE standard.
In the same manner, various vendors or open source projects have created implementations of the JPA standard. The example you've chosen happens to be the Spring/Hibernate implementation of the JPA standard. If you had chosen the Toplink implementation or the OpenJPA implementation, you would see no Spring-specific classes in those implementations.
This question has only marginal relevance to this forum because it appears to be in a Struts 2 application. If you need more understanding of how Spring, JPA, or Hibernate work, your best bet would be to ask these questions in forums more appropriate to those topics.
Oh, and one other thing: Please review the JavaRanch Naming Policy and adjust your displayed name accordingly. [ March 10, 2008: Message edited by: Merrill Higginson ]