如何为需要MyClass.class参数的工厂方法注入Spring Bean

我试图将一个java.util.prefs.Preferences bean注入到我的主控制器中。 控制器看起来像:

@Controller
class MyController {
    @Autowired
    private Preferences preferences;
}

application-context.xml文件为java.util.prefs.Preferences创建一个bean。 它使用工厂方法,所以我有以下条目来创建bean:

<bean id="preferences" class="java.util.prefs.Preferences" factory-method="userNodeForPackage" />

Preferences.userNodeForPackage(param)需要一个与Preference相关的类的参数。 在这种情况下,Spring需要通过执行调用来创建bean:

Preferences.userNodeForPackage(MyController.class);

如何将一个类传递给用工厂方法实例化的spring bean? 谢谢

环境信息:

Java 7
Spring 3.1

你可以指定constructor-arg元素

<bean id="preferences" class="java.util.prefs.Preferences" factory-method="userNodeForPackage">
    <constructor-arg type="java.lang.Class" value="com.path.MyController" />
</bean>

这在这里的正式文件5.4.1节中有解释。

静态工厂方法的参数通过元素提供,就像构造函数实际使用一样。 工厂方法返回的类的类型不必与包含静态工厂方法的类的类型相同,尽管在本例中它是。 实例(非静态)工厂方法将以基本相同的方式使用(除了使用factory-bean属性而不是class属性),因此在此不讨论细节。


那么我不知道基于XML的配置方式,但我可以告诉你如何通过Configuration类实例化它。

@Configuration
public class Config {
    @Bean(name="preferences")
    public java.util.prefs.Preferences preferences() {
        // init
        return java.util.prefs.Preferences.userNodeForPackage(YourExpectedClass.class);
    }
}

PS:

如果您使用完整的基于注解的方法[contextClass=org.springframework.web.context.support.AnnotationConfigWebApplicationContext]或者在您的配置文件中使用以下方法,则需要添加您的配置类/包以便在web.xml中进行扫描:

<context:component-scan base-package="com.comp.prod.conf" />

 public class Preferences
 {  
     SomeBean someBean;

     public void setSomeBean(SomeBean someBean){
            this.someBean = someBean;
     }  

     public static Preferences createSampleBeanWithIntValue(SomeBean someBean)
     {
         Preferences preferences= new Preferences();
         preferences.setSomeBean(someBean);
         return preferences;
     }
}

  <bean id="someBean" class="java.util.prefs.SomeBean"/>

 <bean id="preferences" class="java.util.prefs.Preferences" factory-method="userNodeForPackage" > 

    <constructor-arg ref="someBean "/>       
 </bean>

请参阅参考

http://www.skorks.com/2008/10/are-you-using-the-full-power-of-spring-when-injecting-your-dependencies/

链接地址: http://www.djcxy.com/p/22685.html

上一篇: How to inject Spring Bean for factory method requiring MyClass.class parameter

下一篇: Dependency injection in Spring. not convenient regarding to prototype scope