pass “HardCoded” Constructor Arg Class to bean

2019-05-03 12:08发布

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?

3条回答
一纸荒年 Trace。
2楼-- · 2019-05-03 12:21

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.

查看更多
一纸荒年 Trace。
3楼-- · 2019-05-03 12:25

You can use:

//for constructor
public CheckSpell(SpellCheker spellCheker){
         this.spellCheker=spellCheker;
}

//Use object reference as bean

    <bean id="textEditor" class="com.sring.spellCheck">
          <constructor-arg ref="spellChecker"/>
      </bean>

<bean id="spellCheker" class="com.spring.SpellCheker"/>
查看更多
The star\"
4楼-- · 2019-05-03 12:27

Try:

<bean id="dataMartService" class="com.someClass">
    <constructor-arg>
        <value type="java.lang.Class">someotherclass</value>
    </constructor-arg>
</bean>
查看更多
登录 后发表回答