Simple dependency injection in Atlassian?

todor kolev February 9, 2014

Can I use simple dependency injection in Jira/Confluence? For example simply annotating a class with @Component and then injecting in another class with @Autowired... or I need to do it using Spring Dynamic Modules as described here - https://developer.atlassian.com/display/DOCS/OSGi,+Spring+and+the+Plugin+Framework

3 answers

1 accepted

1 vote
Answer accepted
Steve Gerstner [bridgingIT]
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
February 9, 2014

Use dependency injection via constructor or setter -> https://developer.atlassian.com/display/CONFDEV/Spring+IoC+in+Confluence

todor kolev February 9, 2014

Thanks, for the reference Steve. As far as I can see I can only use xml declarations of beans? ... no component scanning is in place and therefore cannot use annotations?

Steve Gerstner [bridgingIT]
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
February 9, 2014

It's a little bit more complicatet as beside spring each bean is a osgi component.

First, you do not use xml declarations, normally.

You will define a component module which represents a spring bean and an osgi component. This module is defined in the atlassian-plugin.xml. In generall you do not handle with spring directly. And you will not handle osgi directly. That's all wrapped in the atlassian plugin framework.

I'm not sure, but maybe @Reference from Felix-SCR might work. -> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html#reference

But I have never tried that.

todor kolev February 9, 2014

Yeah component module is what I need, thanks!

1 vote
Kul Bhushan Prasad August 13, 2015

Hi,

More Specifically First Add the component in your atlassian-plugin.xml like

 

<component key="myClass" class="com.componay.confluence.plugin.MyComponentClass">
<description>Provides Body markup service.</description>
</component>

Then use setter injection/constructor injection to inject the object like

private MyComponentClass componentClass;
public void setMyComponentClass(MyComponentClass componentClass) {
this.componentClass= componentClass;
}

 

It will inject the object reference in your target class.

0 votes
Kul Bhushan Prasad August 14, 2015

Another way to do it.

Follow https://answers.atlassian.com/questions/140877

Suggest an answer

Log in or Sign up to answer