Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pass "HardCoded" Constructor Arg Class<T> to bean via Spring Config

I have a generic type that I am injecting into a service. Because of the way generics are implemented in Java, I need to have a constructor arg (or property setter) that holds the Class information of the generic type parameter.

My question is -- Can I, via property injection or specifying a constructor arg, pass in an instance of Class with spring?

I DO know the type of T before run time so I know specifically what the Type parameter will be.

I was thinking it would look something like this:

<bean id="dataMartService" class="com.someclass">
    <constructor-arg value="java.lang.class<com.someotherclass>" />
</bean>

Am I completely off in how this should happen?

like image 873
theMothaShip Avatar asked Aug 15 '12 14:08

theMothaShip


2 Answers

Try:

<bean id="dataMartService" class="com.someClass">
    <constructor-arg>
        <value type="java.lang.Class">someotherclass</value>
    </constructor-arg>
</bean>
like image 126
David Grant Avatar answered Oct 21 '22 14:10

David Grant


Use spring el:

<constructor-arg value="#{ T(java.lang.Math) }" />

(you'll need spring 3.0 for this)

That being said, if you pass a string into an argument where a class is expected during a property set, spring should automatically convert it, though i'm not sure how this works when matching constructors. The above approach is much more concise.

like image 37
Matt Avatar answered Oct 21 '22 14:10

Matt