【问题标题】:Spring syntax for setting a Class object?用于设置 Class 对象的 Spring 语法?
【发布时间】:2009-10-22 00:51:20
【问题描述】:

有没有办法在spring中设置一个属性,而不是类的实例,而是类对象本身?即

而不是

<bean>
   <property name="prototype" class="a.b.c.Foo">...

给你一个“Foo”的实例,比如:

<bean>
  <property name="prototype" class="java.lang.Class" value="a.b.c.Foo.class"...

编辑: 迄今为止最好的(工作)解决方案 - 使用正常的实例化并在 setter 中派生类。就解决方案而言,我认为我们会将其描述为“作弊”:

<bean class="Bar">
   <property name="prototype" class="a.b.c.Foo">...


public class Bar{
        public void setPrototype(Object o){
                this.prototypeClass=o.getClass();

编辑: dtsazza 的方法也可以。

编辑: pedromarce 的方法也可以。

【问题讨论】:

    标签: java spring


    【解决方案1】:
    <bean>
       <property name="x">
          <value type="java.lang.Class">a.b.c.Foo</value>
       </property>
     </bean>
    

    应该可以的。

    【讨论】:

      【解决方案2】:

      如果没有更优雅的语法(我不相信有),您当然可以使用static factory methodClass.forName():

      <property name="x">
         <bean class="java.lang.Class" factory-method="forName">
            <constructor-arg value="a.b.c.Foo"/>
         </bean>
      </property>
      

      【讨论】:

      • 我赞成这个,因为这似乎是一个很好的建议。然而,奇怪的是,spring 抱怨 java.lang.Class 出现“ClassNotFoundException”。
      • 没关系,该异常是由于配置错误:) 工作正常。
      【解决方案3】:

      没有。使用 bean 标签,您可以指示 Spring 如何实例化一个类。

      【讨论】:

        【解决方案4】:

        会起作用吗?那应该是 Class 对象的一个​​实例...

        【讨论】:

        • 不,这会给你一个 ClassNotFound,因为没有定义 Foo.class 类这样的东西。
        猜你喜欢
        • 2016-07-17
        • 1970-01-01
        • 2022-01-04
        • 1970-01-01
        • 2011-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-05
        相关资源
        最近更新 更多