Spring配置没有按预期工作

时间:2013-10-04 21:32:14

标签: java spring

我正在构建一个新项目,我想我会尝试一种加载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的工作方式。我离得很近还是离开了?

4 个答案:

答案 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)