Spring API
Spring API allows 3rd party plugins to re-use, integrate with, or extend existing Spring Framework support in IntelliJ IDEA Ultimate.
Please see Spring Framework Support for general feature overview.
A popular plugin using Spring API is hybris integration.
To develop plugins, you will need to use IntelliJ IDEA Ultimate Edition version 13.1 or higher.
Setup Gradle to target IntelliJ IDEA Ultimate, then add dependency to bundled Spring plugin with ID com.intellij.spring
.
Please use only Spring-related functionality exposed in spring-api.jar (sources are provided in $IDEA_HOME$
Add <depends>com.intellij.spring</depends>
to your plugin.xml to require "Spring Support" plugin to be activated. All available extension points are provided under com.intellij.spring
prefix. Note that the "Spring Support" plugin itself has dependencies on a few other plugins which need to be enabled in your sandbox (see notifications on startup).
A Spring facet can be attached to a Module. Nearly all Spring functionality requires an existing and correctly setup Spring facet.
Spring facets usually contain one more user-configured or automatically provided filesets, which group a set of Spring related configuration files (XML, Code, .properties, or other configuration files).
A fileset usually corresponds to an actual application context configuration at runtime. Hierarchies can be modeled by depending on another fileset (possibly from another module).
As an API-user, you will usually prefer working with SpringModel
, which is built on top of fileset(s).
note
2017.3:
LocalXmlModel#setActiveProfiles
&LocalAnnotationModel#setActiveProfiles
have been deprecated and will be removed in 2018.1.
note
Starting with 2016.2, the internal representation of bean type has been changed from
PsiClass
toPsiType
, please note deprecations.
note
Some core classes have been changed in 14(.1); please see " Version 14(.1) " notes for info on how to replace existing API-calls.
note
See Spring API Extension Point and Listener List for the complete list.
To check availability of Spring/Spring Facet etc. see com.intellij.spring.model.utils.SpringCommonUtils
.
2016.2 See com.intellij.spring.SpringLibraryUtil
to obtain information about the exact version of Spring in use.
See SpringManager#getSpringModel(s)...
and com.intellij.spring.model.utils.SpringModelUtils
.
See com.intellij.spring.SpringModelProvider
to provide implicit filesets (e.g. provided by another framework in a specific configuration file).
Version 15 See com.intellij.spring.facet.SpringAutodetectedFileSet
for a convenient base class. Please note that autodetected filesets cannot be edited/modified by users in Spring facet.
2017.1 See com.intellij.spring.facet.SpringFileSetEditorCustomization
to customize presentation and/or add extra settings/actions for specific autodetected filesets.
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).
Version 15 CustomComponentsDiscoverer
has been split into com.intellij.spring.model.custom.CustomLocalComponentsDiscoverer
and com.intellij.spring.model.custom.CustomModuleComponentsDiscoverer
respectively.
Version 14 See com.intellij.spring.model.scope.SpringCustomBeanScope
to provide custom (e.g. framework specific) bean scopes.
Version 14.1 com.intellij.spring.profiles.SpringProfilesFactory
com.intellij.spring.CommonSpringModel#findBeanByName
Version 14: com.intellij.spring.model.utils.SpringModelSearchers#findBean
Choose one of com.intellij.spring.CommonSpringModel#findBeansByPsiClassXXX
variants (please note deprecated methods).
Version 14: com.intellij.spring.model.utils.SpringModelSearchers#findBeans
Version 16: note deprecation of SpringModelSearchParameters.BeanClass#withInheritors(GlobalSearchScope)
Version 14: com.intellij.spring.model.utils.SpringModelSearchers#doesBeanExist
(please note deprecated methods)
Version 14: implement SpringInfrastructureBean
, such beans obtain a special icon and can be filtered in various places in UI.
All support for XML-based Spring configuration files is provided via DOM-API.
See com.intellij.spring.customNamespaces
EP, 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).
Use the following template:
@Convert(SpringBeanResolveConverter.class)
@RequiredBeanType("fqn.to.required.class") // optional
GenericAttributeValue<SpringBeanPointer> getMyAttributeName();
Version 14
JamStringAttributeMeta.Single<SpringBeanPointer> ATTRIBUTE_META =
JamAttributeMeta.singleString("attributeName",
new SpringBeanReferenceJamConverter("fqn.to.required.class"));
Version 16 See com.intellij.spring.model.aliasFor.SpringAliasForUtils
to obtain corresponding @AliasFor
JAM.
Version 15 See com.intellij.spring.spi.SpringSpiManager
.
Add additional inspections (e.g. for custom namespace) to Spring Validator (Settings|Compiler|Validation) via com.intellij.spring.SpringInspectionsRegistry$Contributor
in com.intellij.spring.inspectionsRegistryContributor
extension point.
Version 14.1 Additional files to be processed by inspections registered with Spring Validator (e.g. specific .properties configuration files) can be registered via com.intellij.spring.SpringInspectionsRegistry$AdditionalFilesContributor
Use com.intellij.spring.facet.SpringConfigurator
to provide "automatic" configuration when Spring facet is added via framework wizard.
Please do not reference bean icons from SpringApiIcons
directly, but use SpringPresentationProvider
to re-use unified icon/bean name. See SpringBeansPsiElementCellRenderer
for popup/list renderer.
2018.1
Spring Boot API allows extending/accessing Spring Boot specific support in the IDE.
warning
While we try to maintain compatibility, please be prepared for a less strict policy.
Add dependency to bundled Spring Boot plugin with ID com.intellij.spring.boot
. Sources for Spring Boot API are available in $IDEA_HOME$
Add <depends>com.intellij.spring.boot</depends>
to your plugin.xml to require "Spring Boot" plugin to be activated. All available extension points are provided under com.intellij.spring.boot
prefix.
Use com.intellij.spring.boot.library.SpringBootLibraryUtil
to query version and availability of common additional libraries.
com.intellij.spring.boot.model.SpringBootModelConfigFileContributor
allows adding support for custom config file formats.
Existing Condition
implementations can be simulated at design time in IDE via com.intellij.spring.boot.model.autoconfigure.conditions.ConditionalContributor
.
Custom @ConditionalOn...
annotations implementing com.intellij.spring.boot.model.autoconfigure.conditions.jam.ConditionalOnJamElement
will be added into evaluation automatically.
com.intellij.spring.boot.initializr.SpringInitializrModuleBuilderPostTask
allows performing custom setup steps after creation of module (e.g. setup integration with build system).
Use com.intellij.spring.boot.run.endpoint
extension point to add custom actuator endpoint tabs. Any settings should be exposed in "Spring Boot" settings tab via com.intellij.spring.boot.run.endpointTabConfigurable
EP.