在SpringBoot
框架为我们自动创建的启动类当中,使用了@SpringBootApplication
注解标签对启动 类进行修饰。
@SpringBootApplication
注解标签实际上是一个复合注解标签,包括@EnableAutoConfiguration
、@ComponentScan
通常用在主类上
注解 | 说明 |
---|---|
@SpringBootApplication | 用来声明启动类进行修饰 |
@EnableAutoConfiguration | 是springboot 实现自动化配置的核心注解,通过这个注解把spring 应用所需的bean 注入容器中 |
@ComponentScan | 用来自动扫描注解标识的类,生成ioc 容器里的bean ,默认扫描范围是@ComponentScan 注解所在配置类包及子包的类 |
注解 | 说明 |
---|---|
@Configuration | 作用于类之上,配置spring 容器(应用上下文),相当于把该类作为spring 的xml 配置文件中 |
@Bean | 产生bean 对象加入容器,作用于方法 |
原生SSM
框架整合过程中,如果想要在IOC
容器中添加一个自定义对象,我们所需要完成的工作:
在Spring
框架使用的配置文件的跟标签下,添加如下标签的内容声明:
<bean id="user" class="com.qf.testspringboot.pojo.User">
<property name="id" value="1"/>
<property name="username" value="张三"/>
<property name="age" value="22"/>
</bean>
但是在SpringBoot
框架当中,允许我们直接通过创建并返回Java对象的方式,直接向IOC
容器中注 入自定义的对象。
这个过程,依赖于@Configuration
注解标签和@Bean
注解标签。
首先我们准备一个User
类:
@Data //记得要导入Lombok相关的依赖
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id;
private String username;
private Integer age;
}
然后创建一个UserConfiguration
类,并为这个类使用@Configuration
注解标签,声明这个类是一 个配置类:
@Configuration
public class UserConfiguration {
}
在这个类中创建一个方法,方法的返回值是User
类型的,而方法名就是IOC
容器中注入对象的对 象名,并对这个方法使用@Bean
注解标签:
@Configuration
public class UserConfiguration {
@Bean
public User user() {
/*
下列代码等价于:
<bean id="user" class="com.qf.testspringboot.pojo.User">
<property name="id" value="1"/>
<property name="username" value="张三"/>
<property name="age" value="22"/>
</bean>
方法的返回值数据类型等价于<bean>标签中的class属性取值
方法的方法名等价于<bean>标签中的id属性取值
*/
User user = new User(1, "张三", 22);
return user;
}
}
此时,SpringBoot
框架扫描并向IOC
容器注入对象的逻辑流程是:
@Configuration
注解标签修饰的类型时,将认为这个类是一个配 置类;@Bean
注解标签修饰方法的返回值对象,将被自动注入IOC
容器中保存;@Bean
注解标签修饰方法的返回值数据类型等价于标签的class
属性取值;@Bean
注解标签修饰方法的方法名等价于标签的id
属性取值,即对 象在IOC
容器中的对象名。通过这种方式,我们可以在不使用XML
配置文件的基础上,轻松的向IOC
容器中注入自定义的 Java对象。
@Autowired
默认按类型装配,常用于业务层实现类和持久层实现类
在TestController
类中,通过@Autowired
注解标签自动注入一个User
对象,并在访问test
方法的时 候,打印这个User
对象:
@Controller //SpringMVC当中的注解标签都还能用
public class TestController {
@Autowired
private User user; //自动注入自定义的User对象
@RequestMapping("/test")
@ResponseBody
public String test() {
System.out.println(user); //打印这个User对象
return "Hello SpringBoot!";
}
}
访问test
方法时程序的运行结果:
注解 | 说明 |
---|---|
@Service | 用于业务层 ,业务逻辑层 service 注入spring 容器 |
@Controller | 控制层 controller 注入spring 容器 |
@Repository | 持久层 dao 注入spring 容器 |
@Component | 普通domain 注入spring 容器 |
注解 | 说明 |
---|---|
@ResponseBody | 作用在方法上或类上,让该方法的返回结果直接写入 HTTP response body 中,不会经过视图解析器,返回数据直接在页面展示。 |
@RestController | 是@Controller 和@ResponseBody 的结合体,作用于类,作用等于在类上面添加了@ResponseBody 和@Controller |
注解 | 说明 |
---|---|
@RequestMapping | 使用该注解就可以通过配置的url 进行访问,可以是get 也可以是post |
@GetMapping | 使用该注解就可以通过配置的url 进行访问,限定get 请求方式 |
@PostMapping | 使用该注解就可以通过配置的url 进行访问,限定post 请求方式 |
注解 | 说明 |
---|---|
@RequestParam | 主要用于接收url? 后面的参数,get 或post 请求,只要后面的url? 有参数都可以获取到对应的参数 |
@RequestBody | 该注解用于获取请求体数据(body ),get 没有请求体,故而一般用于post 请求 |
GET
请求中,不能使用@RequestBody
POST
请求,可以使用@RequestBody
和@RequestParam
,但是如果使用@RequestBody
,对于参数转化的配置必须统一。@RequestParam
获取数据,@RequestBody
不可以