Java 有多少种方法可以配置Spring框架?它们在技术上有什么区别?(不是赞成或反对……)
我正在学习这本书(我强烈推荐),对于作者如何解释Spring框架的配置方式,我感到困惑 您可以看到本书中使用的一些代码示例。(任何人都可以使用这些代码。)如果您想看一下,我指的代码将是第2章中的代码 这本书指出有三种方法可以配置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
基于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上下文文件中注册Springbean@Configuration
和@Bean
在上下文中注册Springbean@Component
及其好友实际上很常见,可以与其他2个组件一起使用:
@ComponentScan
ClassPathXmlApplicationContext
,因为他使用xml配置组件扫描,但如果他使用@ComponentScan
,那么肯定会使用注释配置ApplicationContext
所以我认为,这2种方式可以初始化Spring上下文XML或java配置,注释是选项,可以被其中任何一个使用或根本不使用。
不完全是。只有两种方法可以配置Spring框架。Spring框架的两个基本配置工具是:
- XML文件(java文件之外)
- 基于Java(5+)的注释(在Java文件内)
- 配置应用程序上下文(意味着添加bean)——具体应用程序上下文的构造函数接受要扫描的xml文件、包或要加载的直接命名类
- 在web应用程序的情况下引导应用程序上下文-使用
vs使用实现web.xml
WebApplicationInitializer的类
- 您可以使用
- 通过使用
@import
@Configuration
。用它注释的类通常是应用程序上下文中的bean,但它也可以在一个方法上用@bean
注释声明其他bean。这就是为什么这些类通常直接加载而不是扫描bean的原因
第三种方法称为基于注释的配置,它只是两种模式的混合,在这两种模式中,您在更高级别上使用xml配置,只需扫描包以查找其他bean
TL/DR:在spring框架中,只有两种方法可以配置应用程序上下文:
- xml配置文件
- java注释
- f