码迷,mamicode.com
首页 > 编程语言 > 详细

SpringBoot是如何做到无XML文件做配置的?

时间:2019-07-05 14:20:49      阅读:395      评论:0      收藏:0      [点我收藏+]

标签:port   依赖   ESS   采集   实例   style   resource   ack   utf-8   

在传统的Spring框架系列中,xml配置文件无处不在。有SpringMVC、dao、service等各层次的配置文件。到了目前SpringBoot的时代,XML文件几乎销声匿迹。那么SpringBoot背后是如何做到无XML文件配置的呢?

首先,我们回顾一下在xml配置的时代,我们是如何定义一个Bean的?一般的,定义一个Bean的代码片断如下:

<bean id="myBean" class="cn.sessiontech.service.xxxServerImpl">
...
</bean>

如果要定义的Bean数量特别的多,那么还是一个个定义吗?不太现实。故引出了context:component-scan。如:<context:component-scan base-package="cn.sessiontech" />,用于扫描那些被打上了特殊注解的类。将其批量的采集至SpringIoc容器中去。 base-package用于指定扫描范围。

SpringBoot采用了叫JavaConfig方式来代替Xml配置,下边分几大点来比对其各自的表现形式。

1.配置形式层面上的。

xml方式:

<?xml version="1.0" encoding="UTF-8"?>
<beans>
<!--具体的bean定义-->
</beans>

JavaConfig方式:

@Configuration
public class Config {
//bean定义
}
任何一个标注了@Configuration的类都是一个JavaConfig配置类

 

2.Bean的定义层面

xml方式
<bean id="myBean" class="cn.sessiontech.service.xxxServerImpl">
...
</bean>

javaconfig方式
@Configuration
public class Config {
  @Bean
  public xxxServerImpl myBean() {
    return new xxxServerImpl();
  }
}
任何一个标注了@Bean的方法,其返回值将作为一个bean注册至spring Ioc容器,方法名将默认成为此bean的id

 

3.Bean如果有依赖关系的层面

xml方式
<bean id="cp" class="cn.open.db.ConnectionProperty">
<constructor-arg index="0">
<ref bean="r" />
</constructor-arg>
</bean>

<bean id="r" class="org.springframework.core.io.ClassPathResource">
<constructor-arg index="0">
<value>/jdbc.properties</value>
</constructor-arg>
</bean>

javaconfig方式
@Configuration
public class Config {
  @Bean
  public ClassPathResource getResource() {
    return new ClassPathResource("/jdbc.properties");
  }

  @Bean
  public ConnectionProperty getConnectionProperty() {
    return new ConnectionProperty(getResource());
  }
}

 

4.xml文件导入另一个xml文件的层面

XML方式
<import resource="xxx.xml" />来导入配置文件

JavaConfig方式

@Import和@ImportResource

@Import(Xxx.class).只能是针对配置类。若还有部分是xml的,则用@ImportResource("xxx.xml")

 

其他

@PropertySource 注解,用于加载properties,可以声明多个(java8或以上版本)
若想要多个,但低于java8版本,可以使用@PropertySources来

默认情况下的Bean是单例的。若要多实例的,则@Scope("prototype")注解修饰

 

SpringBoot是如何做到无XML文件做配置的?

标签:port   依赖   ESS   采集   实例   style   resource   ack   utf-8   

原文地址:https://www.cnblogs.com/guokecheng/p/11137984.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!