SpringBoot配置与注入

SpringBoot概念

什么是SpringBoot

springboot是spring快速开发脚手架,通过约定大于配置的方式,快速构建和启动spring项目.

SpringBoot优点

spring的缺点:

  1. 复杂的配置: 项目各种配置是开发时的损耗, 写配置挤占了写应用程序逻辑的时间
  2. 混乱的依赖管理:项目的依赖管理非常的繁琐。决定项目里要用哪些库就已经够让人头痛的了,你还要知道这些库的哪个版本 和其他库不会有冲突,这是一个棘手的问题。并且,一旦选错了依赖的版本,随之而来的就是各种的不兼容 的bug。

SpringBoot的特点:

  1. 快速开发spring应用的框架
  2. 内嵌tomcat和jetty容器,不需要单独安装容器,jar包直接发布一个web应用
  3. 简化maven配置,parent这种方式一站式引入需要的各种依赖
  4. 基于注解的零配置思想
  5. 和各种流行框架,spring web mvc,mybatis,spring cloud无缝整合
<parent> 
	<groupId>org.springframework.boot</groupId> 
	<artifactId>spring-boot-starter-parent</artifactId> 		
	<version>2.0.0.RELEASE</version> 
</parent>

SpringBoot提供了一个名为spring-boot-starter-parent的构件,里面已经对各种常用依赖(并非全部)的版本进 行了管理,以这个项目为父工程,这样就不用操心依赖的版本问题了,需要什么依赖,直接引 入坐标即可!

全注解配置和属性注入

spring全注解配置

spring全注解配置主要靠java类和一些注解,比较常用的注解有:

  1. @Configuration :声明一个类作为配置类,代替xml文件
  2. @Bean :声明在方法上,将方法的返回值加入Bean容器,代替 标签
  3. @value :属性注入
  4. @PropertySource :指定外部属性文件,

创建一个jdbc.properties文件,编写jdbc属性:

jdbc.driverClassName=com.mysql.jdbc.Driver 
jdbc.url=jdbc:mysql://127.0.0.1:3306/springboot 
jdbc.username=root 
jdbc.password=123

代码块:

@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
	@Value("${jdbc.url}") 
	String url; 
	@Value("${jdbc.driverClassName}") 
	String driverClassName; 
	@Value("${jdbc.username}") 
	String username; 
	@Value("${jdbc.password}") 
	String password;
	@Bean
	public DataSource dataSource() {
		DruidDataSource dataSource = new DruidDataSource(); 
		dataSource.setUrl(url); 
		dataSource.setDriverClassName(driverClassName); 
		dataSource.setUsername(username); 
		dataSource.setPassword(password); return dataSource;
	}
}

@Configuration :声明 JdbcConfig 是一个配置类
@PropertySource :指定属性文件的路径是: classpath:jdbc.properties
通过 @Value 为属性注入值
通过@Bean将 dataSource() 方法声明为一个注册Bean的方法,Spring会自动调用该方法,将方法的返回值 加入Spring容器中。默认的对象名id=方法名,可以通过@Bean(“自定义名字”),来指定新的对象名

SpringBoot的属性注入

@Value注解。这种方式虽然可行,但是不够 强大,因为它只能注入基本类型值。在SpringBoot中,提供了一种新的属性注入方式,支持各种java基本数据类型及复杂类型的注入。
在这里插入图片描述

  1. 在类上通过@ConfigurationProperties注解声明当前类为属性读取类
  2. prefix=“jdbc” 读取属性文件中,前缀为jdbc的值。
  3. 在类上定义各个属性,名称必须与属性文件中 jdbc. 后面部分一致
  4. 建一个application.properties,这是SpringBoot默认读取的属性文件名:
    在这里插入图片描述
    在这里插入图片描述通过 @EnableConfigurationProperties(JdbcProperties.class) 来声明要使用 JdbcProperties 这个类的对象
    这里注入注入JdbcProperties方式声明有@Bean的方法参数注入
    还可以通过@Autowired注入构造函数注入
//注解注入
@Autowired 
private JdbcProperties prop;

//构造方法注入
private JdbcProperties prop; 
public JdbcConfig(Jdbcproperties prop){ 
	this.prop = prop;
 }

更优雅的注入

直接在需 要的地方声明
在这里插入图片描述直接把 @ConfigurationProperties(prefix = “jdbc”) 声明在需要使用的 @Bean 的方法上,然后SpringBoot 就会自动调用这个Bean(此处是DataSource)的set方法,然后完成注入。使用的前提是:该类必须有对应属性的 set方法!

自动配置

spring全注解配置

@SpringBootApplication

在这里插入图片描述SpringBoot的启动器

@SpringBootConfiguration

在这里插入图片描述通过这段源码我们可以看出,在这个注解上面,又有一个 @Configuration 注解。这个注解的作用就是声明当前类是一 个配置类,然后Spring会自动扫描到添加了 @Configuration 的类,并且读取其中的配置信息

@ComponentScan

在这里插入图片描述在这里插入图片描述配置组件扫描的指令。提供了类似与 context:component-scan 标签的作用 通过basePackageClasses或者basePackages属性来指定要扫描的包。如果没有指定这些属性,那么将从声 明这个注解的类所在的包开始,扫描包及子包,一般启动类会放在一个比较前的包目录中。

@EnableAutoConfiguration

在这里插入图片描述

默认配置

@EnableAutoConfiguration会开启SpringBoot的自动配置,并且根据你引入的依赖来生效对应的默认配置,引入的依赖中,存在多个自动配置类。如下图:
在这里插入图片描述这里涵盖了很多主流的框架,redis、jms、amqp、jdbc、mogodb、solr…
在这里插入图片描述在这里插入图片描述类上的多个注解:

  1. @Configuration :声明这个类是一个配置类
  2. @ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })            条件是OnClass,也就是满足以下类存在:Servlet、DispatcherServlet、WebMvcConfigurer,其中 Servlet只要引入了tomcat依赖自然会有,后两个需要引入SpringMVC才会有。这里就是判断你是否引入了相 关依赖,引入依赖后该条件成立,当前类的配置才会生效!
  3. @ConditionalOnMissingBean(WebMvcConfigurationSupport.class)         这个条件与上面不同,OnMissingBean,是说环境中没有指定的Bean这个才生效。其实这就是自定义配置的 入口,也就是说,如果我们自己配置了一个WebMVCConfigurationSupport的类,那么这个默认配置就会失 效!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值