Spring injection with java annotation?

A

Alberto Sfolcini

Hi,

I am wondering if I can use an annotation to inject property and avoid
to write getters and setters for each property.

Let's suppose my spring's bean looks like:

<bean id="test" class="foo.bar.Test">
<property name="debug" value="true"/>
<property name="firstname" value="Bill" />
<property name="lastname" value="Gates" />
</bean>

The Test class should look like:

public class Test{
private boolean debug;
private String firstname;
private String lastname;

// Setters and getters...

public void setFirstname(String furstname) {
this.firstname = firstname;
}

etc etc...

}

What I would like to obtain is to avoid the setters and getters
methods by using an annotation:

public class Test{
@Inject(name="debug", optional="false")
private boolean debug;
@Inject
private String firstname;
@Inject
private String lastname;
}

So, let's see the @Inject interface:

public @interface Inject {
String name() default "";
boolean optional() default false;
}

Now, what I am missing is the injection engine, that should be written
in a class that extends the ApplicationContext I guess.

Can somebody give some help?

thanks
 
O

Owen Jacobson

Hi,

I am wondering if I can use an annotation to inject property and avoid
to write getters and setters for each property.

Let's suppose my spring's bean looks like:

<bean id="test" class="foo.bar.Test">
    <property name="debug" value="true"/>
    <property name="firstname" value="Bill" />
    <property name="lastname" value="Gates"  />
</bean>

The Test class should look like:

public class Test{
   private boolean debug;
   private String firstname;
   private String lastname;

   // Setters and getters...

   public void setFirstname(String furstname) {
      this.firstname = firstname;
   }

  etc etc...

}

What I would like to obtain is to avoid the setters and getters
methods by using an annotation:

public class Test{
   @Inject(name="debug", optional="false")
   private boolean debug;
   @Inject
   private String firstname;
   @Inject
   private String lastname;

}

So, let's see the @Inject interface:

public @interface Inject {
        String name() default "";
        boolean optional() default false;

}

Now, what I am missing is the injection engine, that should be written
in a class that extends the ApplicationContext I guess.

Can somebody give some help?

thanks

@Autowired.

Spring supports most of the behaviour you want already, at least as of
2.5-series releases (and possibly 2.0-series releases).

Docs link: <http://static.springframework.org/spring/docs/2.5.x/
reference/beans.html#beans-annotation-config>

However, it will still use setFoo injection or constructor arguments -
you can't get away from that without rewriting part of Spring's actual
injection mechanism (which is well-buried). Furthermore, you don't
need to provide set/get pairs for properties you want injected: a set
method is enough. The only reason to add a get method is if you plan
on using the property elsewhere via its get method.

-o
 
A

Alberto Sfolcini

You do not need a setter, works with a private field too.


Yes it works fine without a setter method, but it is not exactly what
I wanted.
Let's say that it wires with types, I read it's also possible to wire
by names, I have to look at it deeply.
thanks.
 
A

Alberto Sfolcini

You do not need a setter, works with a private field too.

// autowiring by Name
@Autowired
@Qualifier("yourObjectName")


Is there a way to merge these annotation into one? for example
( @Inject(name="yourObjectName", required=true) ?
Any ideas?
 
C

Chris Seidel

Alberto said:
// autowiring by Name
@Autowired
@Qualifier("yourObjectName")


Is there a way to merge these annotation into one? for example
( @Inject(name="yourObjectName", required=true) ?
Any ideas?

Look into the component-scanner code how the annotations are found.
But I think you have to chance the scanner.
Why not 3 annotations?
 
A

Alberto Sfolcini

On 24 Apr, 18:20, "Chris Seidel"
Look into the component-scanner code how the annotations are found.
But I think you have to chance the scanner.
Why not 3 annotations?

No problem at all even with 3 annotations.
I was thinking if is possible to use annotation even with Struts2 in
order to avoid setters and getters.
Do you know something about it?

bye
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,050
Latest member
AngelS122

Latest Threads

Top