Support for Java Spring has been released in Understand build 1168. The current support is limited to Spring Annotations (it does not support XML configuration). The annotations recognized currently are annotations for Dependency Injection, Aspect Oriented Programming, and JPA/Hibernate. If you're looking for other features, we'd love your feedback (support@scitools.com).


To try the new Spring Features, you must enable the "Use Spring" Java option before analyzing.

After analyzing, you can find the 'Spring Framework' entity from the Entity Filter by selecting 'Frameworks'.



This is the top level view of the Spring information.


The Information Browser for the Spring Framework shows the recognized Beans, Tables, MappedSuperclasses, and Embeddables, along with Calls and Uses.



The "Calls" field on the Spring Framework IB shows the list of all methods automatically called by Spring. These include constructors used to create Bean variables and other methods marked with annotations that can cause an automatic call.



The Information Browser for each Bean variable shows the list of variables the Bean entity is injected into:



The Information Browser for a Java Variable will show the Injected Bean if a bean is injected by Spring:



The Spring JPA/Hibernate information is represented in Understand "Tables", "Mapped Superclasses", and "Embeddables" (this sample code contains only Tables and Mapped Superclasses):



The Table entities are the database tables that will store the Java classes. The IB for each Table shows its Columns and its Relations to other tables.



Understand does not currently parse the JPQL or SQL string in JPA "Query" annotations. So, for example, references to variables in the following annotation are not recorded.


@Query("SELECT DISTINCT owner FROM Owner owner left join  owner.pets WHERE owner.lastName LIKE :lastName% ")


Similarly, Understand is currently not parsing the pointcut expression strings in Spring Aspect Oriented Programming annotations.


In the following example, an implicit call from Spring is recorded to loggingAdvice because it is annotated with the AOP "Before" annotation, but the expression "excecution(...)" is not parsed.


@Before("execution(public void com.journaldev.spring.model..set*(*))")
  public void loggingAdvice(JoinPoint joinPoint){...}


Understand has a new entity filter to see all Referenced Annotations in the project.



If the project configuration does not include all referenced types, it is recommended to turn off filtering of unresolved entities in the entity filter to include annotations that were not found in supplied jar files.


The Information Browsers for all Java entities now include an "Annotations" field that show the annotations used on the declaration.



This is a simple project that uses many of the Spring annotations show above:


Spring Petclinic