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

2022-09-03 00:53:55

我正在尝试将java.util.prefs.Preferences bean注入到我的主控制器中。控制器如下所示:

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

应用程序上下文.xml文件为 java.util.prefs.Preferences 创建 bean。它使用工厂方法,所以我有以下用于创建bean的条目:

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

Preferences.userNodeForPackage(param) 将与首选项相关的类作为参数。在这种情况下,Spring需要通过执行调用来创建bean:

Preferences.userNodeForPackage(MyController.class);

如何将类传递到使用工厂方法实例化的弹簧豆中?谢谢

环境信息:

Java 7
Spring 3.1

答案 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 属性),因此此处不会讨论细节。


答案 2

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

@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" />