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

Aus*_*aws 16 java spring factory class preferences

我正在尝试将java.util.prefs.Preferences bean注入我的主控制器.控制器看起来像:

@Controller
class MyController {
    @Autowired
    private Preferences preferences;
}
Run Code Online (Sandbox Code Playgroud)

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

<bean id="preferences" class="java.util.prefs.Preferences" factory-method="userNodeForPackage" />
Run Code Online (Sandbox Code Playgroud)

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

Preferences.userNodeForPackage(MyController.class);
Run Code Online (Sandbox Code Playgroud)

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

环境信息:

Java 7
Spring 3.1
Run Code Online (Sandbox Code Playgroud)

Sot*_*lis 23

您可以指定constructor-arg元素

<bean id="preferences" class="java.util.prefs.Preferences" factory-method="userNodeForPackage">
    <constructor-arg type="java.lang.Class" value="com.path.MyController" />
</bean>
Run Code Online (Sandbox Code Playgroud)

这是官方文档中解释这里,第5.4.1节.

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

  • @NandkumarTekale阅读报价和文档.当你指定`factory-method`属性时,你就是这样做的. (3认同)