如何为需要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