我正在构建一个新项目,我想我会尝试一种加载Spring配置的新方法。我找到了@Configuration
注释,并决定尝试一下。
@Configuration
@ImportResource("classpath:myApp-config.xml")
public class MyAppConfig
{
@Autowired
private MyClass myClass;
@Bean(name="someOtherBeanName")
public MyClass getMyClass ()
{
return myClass;
}
public void setMyClass( myClass m)
{
this.myClass= m;
}
}
在spring配置文件中:
<context:annotation-config/>
<bean name="someOtherBeanName" class="com.MyClass">
<property name="myClass">
<map>
<!-- details not relevant -->
</map>
</property>
</bean>
为了利用这个,我有这样的代码:
//class member
private static MyAppConfig cfg = new MyAppConfig();
...
...
...
//In the class that needs the configuration
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(MyAppConfig.class);
ctx.refresh();
//appMgr = cfg.getMyClass();
appMgr = (MyClass) ctx.getBean("someOtherBeanName");
正如您所看到的,我认为我可以从配置对象中获取Spring配置的MyClass实例,但我必须从我的上下文对象中获取它。
我想我误解了@Configuration
和@Bean
的工作方式。我离得很近还是离开了?
答案 0 :(得分:1)
你无法从cfg.getMyClass();
获取你的bean,有一些误解。
@Configuration
只是弹簧配置的另一种表示,你应该像你的application-context.xml
一样理解它,这里没什么新东西。
答案 1 :(得分:0)
此
private static MyAppConfig cfg = new MyAppConfig();
不是 Spring托管bean ,因此在致电null
时您将获得getMyClass()
。
另外,以下
@ImportResource("classpath:myApp-config.xml")
带
@Autowired
private MyClass myClass;
@Bean(name="someOtherBeanName")
public MyClass getMyClass ()
{
return myClass;
}
是多余的。由于@ImportResource
,XML配置中的bean已经在上下文中。
表示包含要导入的bean定义的一个或多个资源。
您之间不需要额外的@Bean
方法。
答案 2 :(得分:0)
你还有很长的路要走...完整的基于Java的配置将是你的例子:
@Configuration
public class MyAppConfig {
@Bean
public MyClass someOtherBeanName() {
MyClass myClass = new MyClass();
myClass.setMyProp(null /* details not relevant */);
return myClass;
}
}
main
方法中的其他位置(未更改):
//In the class that needs the configuration
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(MyAppConfig.class);
ctx.refresh();
//appMgr = cfg.getMyClass();
appMgr = (MyClass) ctx.getBean("someOtherBeanName");
答案 3 :(得分:0)
添加您可能遇到的内容,如果您仍然找不到config.xml或javaconfig.class。检查文件结构。
- 的 SRC 强>
- config.xml 或 javaconfig.java
将配置保存在路径中(默认包为src)