Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有多少种方法可以配置Spring框架?它们在技术上有什么区别?(不是赞成或反对……)_Java_Xml_Spring - Fatal编程技术网

Java 有多少种方法可以配置Spring框架?它们在技术上有什么区别?(不是赞成或反对……)

Java 有多少种方法可以配置Spring框架?它们在技术上有什么区别?(不是赞成或反对……),java,xml,spring,Java,Xml,Spring,我正在学习这本书(我强烈推荐),对于作者如何解释Spring框架的配置方式,我感到困惑 您可以看到本书中使用的一些代码示例。(任何人都可以使用这些代码。)如果您想看一下,我指的代码将是第2章中的代码 这本书指出有三种方法可以配置Spring容器 基于XML的配置 这将需要一个类似以下内容的xml文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www

我正在学习这本书(我强烈推荐),对于作者如何解释Spring框架的配置方式,我感到困惑

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

这本书指出有三种方法可以配置Spring容器


基于XML的配置

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

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" ...>

    <bean id="accountService" class="com.wiley.beginningspring.ch2.AccountServiceImpl">
        <property name="accountDao" ref="accountDao"/>
    </bean>
    
    <bean id="accountDao" class="com.wiley.beginningspring.ch2.AccountDaoInMemoryImpl">
    </bean>

</beans>
我现在没有任何困惑


基于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;
    }
}
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("/ch2-beans.xml");
负责引导Spring的代码如下所示:

ApplicationContext applicationContext
            = new AnnotationConfigApplicationContext(Ch2BeanConfiguration.class);
到现在为止,一切都很清楚。(有点…)我还想指出,这里我们实际上有一个注释,叫做@Configuration


基于注释的配置

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

有一个xml文件,就像我们在基于xml的配置中使用的一样,但是它要小得多:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" ...>
    <context:component-scan base-package="com.wiley.beginningspring.ch2"/>
</beans>
等等

所有依赖项都有注释:

@Autowired
这样豆子就可以注射了

此配置方法中Spring framework的引导方式如下:

@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;
    }
}
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("/ch2-beans.xml");

以下是我的问题:

为什么(所谓的)基于注释的配置实际上使用的是ClassPathXmlApplicationContext,而不是上面的注释配置ApplicationContext?后者似乎更适合用于带有“基于注释”字样的配置中,不是吗

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

在我看来,这本书中解释的基于注释的配置方式实际上类似于:使用自动连线bean的基于XML的配置。它甚至没有@Configuration注释,而“基于Java的配置”有


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

我没有看过这本书,但您的假设实际上是正确的

要启动Spring应用程序并让框架使用XML配置的bean实例化所有bean,必须使用ClassPathXmlApplicationContext

在Spring中配置bean有两种方法:

1) XML bean 2) 注释方法

基本上,XMLBean在Spring2.5-3中使用,而注释方法在Spring4中使用得更多

@Bean // is a way to create a bean. It is the equalivant of the beans tag in XML.

@Configuration // is a way to tell the Spring container that this class is a list of configuration beans
Spring有2个Spring容器:

1) 豆工厂 2) 应用程序上下文

BeanFactory是最简单的容器,只接受一个配置文件。ApplicationContext是最高级的Spring容器,在企业应用程序中使用,因为它接受一系列配置文件,具有JNDI集成、EJB集成,并支持消息的国际化


我希望这能有所帮助。

首先让我展示一下不同的编码:

  • XML:您必须使用
    在XML上下文文件中注册Springbean
  • Java配置:您必须使用
    @Configuration
    @Bean
    在上下文中注册Springbean

  • 注释:通过使用
    @Component
    及其好友实际上很常见,可以与其他2个组件一起使用:

  • 在xml中使用
  • 在java配置中使用
    @ComponentScan
  • 为什么要使用
    ClassPathXmlApplicationContext
    ,因为他使用xml配置组件扫描,但如果他使用
    @ComponentScan
    ,那么肯定会使用
    注释配置ApplicationContext


    所以我认为,这2种方式可以初始化Spring上下文XML或java配置,注释是选项,可以被其中任何一个使用或根本不使用。

    不完全是。只有两种方法可以配置Spring框架。Spring框架的两个基本配置工具是:

    • XML文件(java文件之外)
    • 基于Java(5+)的注释(在Java文件内)
    两者都可用于:

    • 配置应用程序上下文(意味着添加bean)——具体应用程序上下文的构造函数接受要扫描的xml文件、包或要加载的直接命名类
    • 在web应用程序的情况下引导应用程序上下文-使用
      web.xml
      vs使用实现
      WebApplicationInitializer的类
    最后但并非最不重要的是:

    • 您可以使用
    • 通过使用
      @import
    在您的书中,第二种称为基于Java的配置的方法是一种特殊的注释
    @Configuration
    。用它注释的类通常是应用程序上下文中的bean,但它也可以在一个方法上用
    @bean
    注释声明其他bean。这就是为什么这些类通常直接加载而不是扫描bean的原因

    第三种方法称为基于注释的配置,它只是两种模式的混合,在这两种模式中,您在更高级别上使用xml配置,只需扫描包以查找其他bean


    TL/DR:在spring框架中,只有两种方法可以配置应用程序上下文:

    • xml配置文件
    • java注释
    它们可以是混合的

    但每个bean都可以用3种方式声明:

    • f