0

我想知道这是否会给我带来麻烦,或者这是一个坏主意:

@Configuration
public class MyConfig {
    @Bean
    public SomeBean1 someBean1() {
        return ...
    }

    @Bean
    public SomeBean2 someBean2() {
        return ...
    }
}

public class Main {
    public static void main(String[] args) throws Throwable {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(HubBrokerConfig.class);
        MyConfig conf = ctx.getBean(MyConfig.class);

        conf.someBean1().doSomething();
        conf.someBean2().doSomething();
    }
}

你可能想知道为什么我会像上面那样做而不是:

public class Main {
    public static void main(String[] args) throws Throwable {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(HubBrokerConfig.class);
        ctx.getBean(SomeBean1.class)).doSomething();
        ctx.getBean(SomeBean2.class)).doSomething();
    }
}

我不太喜欢第二种方法,因为它不会在编译时捕获那么多错误。例如,如果我执行 ctx.getBean(SomeNonBean.class) 我不会得到编译时错误。此外,如果 someBean1() 是私有的,编译器会捕获错误。

4

1 回答 1

0

首选的方法是

@Autowired
private SomeBean1 somebean1;

@Autowired
private SomeBean2 somebean2;

这甚至更简洁,使测试更简单,并避免了不必要地实例化不必要的副本等问题。

于 2013-08-02T22:02:11.543 回答