Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为需要MyClass.class参数的工厂方法注入Springbean_Java_Spring_Class_Preferences_Factory - Fatal编程技术网

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

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

我正在尝试将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" />
如何将类传递给使用工厂方法实例化的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();  
}  
}