有多少种配置Spring框架的方法?它们在技术上有什么区别?(不涉及优缺点...)

17 浏览
0 Comments

有多少种配置Spring框架的方法?它们在技术上有什么区别?(不涉及优缺点...)

我正在学习这本书(非常推荐),但对解释Spring框架配置方式感到困惑。

您可以在这里看到一些在书中使用的代码示例(对任何人都可用)。我所指的代码将来自第2章,如果您想看一下。

书中提到有3种配置Spring容器的方式


基于XML的配置

这将需要一个类似于以下内容的xml文件:



    
        
    
    
    

然后为了启动Spring,将使用以下代码:

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("/com/wiley/beginningspring/ch2/ch2-beans.xml");

目前我没有任何疑问。


基于Java的配置

在这种配置方法中,将会有一个用于配置的类,如下所示:

@Configuration
public class Ch2BeanConfiguration {
    @Bean
    public AccountService accountService() {
        AccountServiceImpl bean = new AccountServiceImpl();
        bean.setAccountDao(accountDao());
        return bean;
    }
    @Bean
    public AccountDao accountDao() {
        AccountDaoInMemoryImpl bean = new AccountDaoInMemoryImpl();
        return bean;
    }
}

负责启动Spring的代码如下所示:

ApplicationContext applicationContext
            = new AnnotationConfigApplicationContext(Ch2BeanConfiguration.class);

到目前为止,对我来说一切都很清楚(某种程度上...)。我还要注意一下,这里实际上有一个被称为@Configuration的注解...


基于注解的配置

书中解释的最后一种可用的配置方法是基于注解的配置

有一个与基于XML的配置中类似的xml文件,但要小得多:



    

所有的bean都有注解,如:

@Component, @Service

等等。

所有的依赖都有注解:

@Autowired

以便可以注入bean。

Spring框架在这种配置方法中的启动方式如下所示:

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("/ch2-beans.xml");


以下是我的问题:

为什么所谓的基于注解的配置实际上使用了ClassPathXmlApplicationContext而不是上面的AnnotationConfigApplicationContext?后者似乎更适合在配置中使用带有“基于注解”的词汇,不是吗?

书中解释的Java Based Configuration似乎更应该称为基于注解的配置

而书中解释的基于注解的配置实际上对我来说更像是:带有自动注入bean的基于XML的配置。它甚至没有像“基于Java的配置”那样的@Configuration注解。

有多少种配置Spring框架的方法?

0