Java 如何为需要MyClass.class参数的工厂方法注入Springbean
我正在尝试将java.util.prefs.Preferences bean注入到主控制器中。控制器看起来像:Java 如何为需要MyClass.class参数的工厂方法注入Springbean,java,spring,class,preferences,factory,Java,Spring,Class,Preferences,Factory,我正在尝试将java.util.prefs.Preferences bean注入到主控制器中。控制器看起来像: @Controller class MyController { @Autowired private Preferences preferences; } application-context.xml文件为java.util.prefs.Preferences创建bean。它使用工厂方法,因此我有以下条目来创建bean: <bean id="preferen
@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" />
如何将类传递给使用工厂方法实例化的Springbean?
谢谢
环境资料:
Java 7
Spring 3.1
您可以指定
构造函数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属性之外
而不是类属性),因此将不讨论详细信息
在这里
公共类首选项
{
豆豆豆;
public void setSomeBean(SomeBean SomeBean){
this.someBean=someBean;
}
公共静态首选项createSampleBeanWithIntValue(SomeBean SomeBean)
{
首选项=新的首选项();
setSomeBean(someBean);
返回偏好;
}
}
请参阅参考资料
能否尝试将“首选项”设置为“MyController”的属性。
差不多
<bean id="MyController" class="com.your.package.MyController">
<property name="preferences" ref="preferences" />
</bean>
然后在MyController中使用getter和setter方法作为首选项
我认为这应该行得通。我不知道基于xml的配置方式,但我可以告诉您如何通过
配置
类实例化它
@Configuration
public class Config {
@Bean(name="preferences")
public java.util.prefs.Preferences preferences() {
// init
return java.util.prefs.Preferences.userNodeForPackage(YourExpectedClass.class);
}
}
附言:
如果使用基于注释的完整方法,则需要在web.xml中添加用于扫描的配置类/包[contextClass=org.springframework.web.context.support.AnnotationConfigWebApplicationContext]
,或在配置文件中添加,如下所示:
<context:component-scan base-package="com.comp.prod.conf" />
首先使用xml文件或注释创建“首选项”类的bean。
然后 如果您使用xml配置创建bean以激活@Autowired注释功能,则可以使用此
(或)
如果您使用注释创建bean。
注意:在SpringServletXML文件中定义上述标记,spring框架提供了使用工厂方法注入bean的工具。为此,我们可以使用bean元素的两个属性 工厂方法:表示将被调用以注入bean的工厂方法。 工厂bean:表示将调用工厂方法的bean的引用。如果工厂方法是非静态的,则使用该方法。 返回类实例的方法称为工厂方法
public class A {
public static A getA(){//factory method
return new A();
}
}
OP的问题不是自动连接对象。问题是为静态factory-method指定参数和参数。他需要将参数作为参数提供给
userNodeForPackage()
方法,而不是首选项的构造函数。当您指定了工厂方法
属性时,就是这样做的。+1可能应该在您的回答中提到它来自Maven中的spring上下文工件。
<context:component-scan base-package="com.comp.prod.conf" />
public class A {
public static A getA(){//factory method
return new A();
}
}