1.Spring的注入方式
如果抛开任何的xml,那么我们如果要配置一个Bean该怎么办?比如我们要配置一个数据库连接池,以前会这么玩:
<!--1、spring的ioc容器:特殊的map
2、id:key calss:全类名,可通过反射得到该类的实例并放到ioc容器-->
<bean id="dog" class="com.qf.service.Dog">
<property name="nam" value="旺财" />
</bean>
现在该怎么做呢?
2.SpringBoot注入方式
2.1.准备
2.1.1.创建工程
02_springboot_properties_config
2.1.2.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.qf</groupId>
<artifactId>02_springboot_properties</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
2.1.3.启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App{
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
2.1.4.controller
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;
@Controller
public class HelloWorld {
@Autowired
private Dog dog;
@RequestMapping("/hello")
@ResponseBody
public Dog hello(){
System.out.println(dog.getNam());
return dog;
}
}
2.2.5.application.properties
dog.nam=二狗
dog.age=2
2.2.6.pojo
public class Dog{
private String nam;
private Integer age;
//set get toString
}
2.2.@Value方式
2.2.1.说明
-
作用:
注入基本数据类型和String类型数据的
-
属性:
value:用于指定值
2.2.2.属性注入
@Component
public class Dog{
@Value("${dog.nam}")
private String nam;
@Value("${dog.age}")
private Integer age;
//set get toString......
}
2.2.3.测试
2.3.@ConfigurationProperties方式
2.3.1.说明
-
作用:
@ConfigurationProperties支持松散绑定,只需要指定一个前缀,就能绑定有这个前缀的所有属性值。
-
属性:
value:用于指定读取配置信息的前缀
2.3.2.属性注入
@Component
@ConfigurationProperties("dog")读dog开头的配置,并通过set方法注入到“dog”
public class Dog {
private String nam;
private Integer age;
public String getNam() {
return nam;
}
public void setNam(String nam) {
this.nam = nam;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
@Configuration
public class BeanConfig {
}
2.3.3.测试
2.4.SpringBoot默认注入方式
2.4.1.说明
SpringBoot配置主要靠java类和一些注解来达到和xml配置一样的效果,比较常用的注解有:
@Configuration
:声明一个类作为配置类,代替xml文件@Bean
:声明在方法上,将方法的返回值加入Bean容器,代替<bean>
标签
2.4.2.属性注入
@Configuration
public class BeanConfig {
@Bean
@ConfigurationProperties("dog")//读dog开头的配置,并通过set方法注入到“dog”
public Dog dog(){
Dog dog = new Dog();
return dog;
}
}
2.4.3.测试
3.SpringBoot中的默认配置
我们的项目中,已经引入了一个依赖:spring-boot-autoconfigure,其中定义了大量自动配置类:
非常多,几乎涵盖了现在主流的开源框架,例如:
- redis
- jms
- amqp
- jdbc
- jackson
- mongodb
- jpa
- solr
- elasticsearch
… 等等