Spring API Guide

Skip to end of metadata
Go to start of metadata
Questions or comments? Please use our dedicated forum.

Using Spring-API

To develop plugins integrating with Spring-API you will need to use IntelliJ IDEA Ultimate Edition version 13.1 (or higher).

Setting up IntelliJ Platform SDK

New SDK

Please create a IntelliJ Platform SDK to include all minimum required files.
Then add $IDEA_HOME$/plugins/spring/spring.jar to its classpath (not to your plugin module's dependencies).

Existing SDK

Follow these steps to modify existing SDK:

  1. add to IntelliJ Platform SDK classpath (not to your plugin module's dependencies)
    • $IDEA_HOME$/plugins/spring/spring-api.jar
    • $IDEA_HOME$/plugins/spring/spring.jar
  2. add to IntelliJ Platform SDK sourcepath
    • $IDEA_HOME$/lib/src/src_spring-openapi.zip
General Notes

If you use other Spring functionality (e.g. Spring EL) in your plugin, make sure to add all required JARs to your IntelliJ Platform SDK classpath to make your plugin's tests work.

Please use only Spring-related functionality exposed in spring-api.jar (where sources are provided) in your plugin. Using any other "internal" (implementation) classes from Spring plugin itself (spring.jar) is not supported.

plugin.xml

Add <depends>com.intellij.spring</depends> to your plugin.xml to require "Spring Support" plugin to be activated. Navigate to target to see all available extension points.
Note that "Spring Support" plugin itself has dependencies to a few other plugins which need to be enabled in your sandbox (see notifications on startup).

Main concepts

A Spring facet can be attached on a Module.
Spring facets usually contain one more user-configured/provided filesets, which group a set of Spring related configuration files (XML, Code or .properties files).
A fileset usually corresponds to one actual application context configuration at runtime.
Filesets can depend on other filesets (possibly in another module).

As an API-user, you will usually rather work with SpringModel (which is built on top of fileset(s)).

How do I...

Some core classes have been changed in 14, please see "Version 14" notes for info on how to replace existing API-calls

Spring Model

Obtain Spring Model by file, PsiElement, ..

See SpringManager#getSpringModel(s)... and com.intellij.spring.model.utils.SpringModelUtils.

Contribute implicit model(s)

See com.intellij.spring.SpringModelProvider to provide implicit filesets (e.g. provided by another framework in specific configuration file).

Contribute implicit beans

See com.intellij.spring.model.jam.CustomComponentsDiscoverer or com.intellij.spring.model.SpringImplicitBeansProviderBase to provide implicit (framework-specific) beans (e.g. "servletContext" by Spring MVC).

Contribute custom bean scope

Version 14
See com.intellij.spring.model.scope.SpringCustomBeanScope to provide custom (e.g. framework specific) bean scopes.

Beans

Search for bean by name

com.intellij.spring.CommonSpringModel#findBeanByName
Version 14: com.intellij.spring.model.utils.SpringModelSearchers#findBean

Search for beans by type

Choose one of com.intellij.spring.CommonSpringModel#findBeansByPsiClassXXX variants.
Version 14: com.intellij.spring.model.utils.SpringModelSearchers#findBeans

Find out whether bean with name/type exists

Version 14: com.intellij.spring.model.utils.SpringModelSearchers#doesBeanExist

Mark bean as infrastructure bean

Version 14: implement SpringInfrastructureBean

XML Configuration

All support for XML-based Spring configuration files is provided via DOM-API.

Add support for additional Spring namespace

See EP com.intellij.spring.dom.SpringCustomNamespaces, registered namespace-key must match the one registered with your DOM elements via @Namespace.
Register available elements via standard DomExtender<Beans> EP or com.intellij.spring.dom.SpringCustomNamespaces#registerExtensions (Version 14).
Please pay attention to getModelVersion and getStubVersion (see javadoc).

Add reference to Spring Bean in my DomElement

Use the following template:

Code Configuration

Add reference to Spring Bean in my JamElement

Version 14

IDE features

Add inspections to Spring Validator

Add additional inspections (e.g. for custom namespace) to Spring Validator (Settings|Compiler|Validation) via EP com.intellij.spring.SpringInspectionsRegistry$Contributor.

Configure Spring support for other frameworks

Use com.intellij.spring.facet.SpringConfigurator to provide "automatic" configuration when Spring facet is added via framework wizard.

UI/Presentation

Please do not reference bean icons from SpringApiIcons directly, but use SpringPresentationProvider to get unified icon/bean name. See SpringBeansPsiElementCellRenderer for popup/list renderer.

Labels:
None
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.