Spring Boot是一个快速开发框架,快速的将一些常用的第三方依赖整合(通过Maven子父亲工程的方式),简化xml配置,全部采用注解形式,内置Http服务器(Jetty和Tomcat),最终以Java应用程序进行执行。Spring DIP
一、注解Controller 和 RestController
RestController的作用相当于Controller加ResponseBody共同作用的结果,但采用RestController请求方式一般会采用Restful风格的形式。
Controller的作用:声明该类是Controller层的Bean,将该类声明进入Spring容器中进行管理
ResponseBody的作用:表明该类的所有方法的返回值都直接进行提交而不经过视图解析器,且返回值的数据自动封装为json的数据格式
RestController的作用:包含上面两个的作用,且支持Restful风格的数据提交方式
Restful风格:
get:获取数据时用的请求方式
post:增加数据时的请求方式
put:更新数据时的请求方式
delete:删除数据时的请求方式
在每个Controller类的上边加速注解,用于形成API接口交付给前端
二、@NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor
区别:
- @NoArgsConstructor:生成无参的构造方法。
- @AllArgsConstructor:生成该类下全部属性的构造方法。
- @RequiredArgsConstructor:生成该类下被final修饰或者non-null字段生成一个构造方法。
场景:
在springboot中,对于一个bean类,注入其他bean的时候,常见的是使用@Autowired,实际上也可以使用构造函数注入,
这个时候就可以使用@AllArgsConstructor或者@RequiredArgsConstructor来代替。
三、泛型
以下代码编译器会报错(com.yang.memorytest.Person.this’ cannot be referenced from a static context),因为泛型类型只有在类实例化的时候才确定,而静态方法可以直接通过类来调用;
如果静态方法需要使用泛型,可以在方法定义泛型,
public class Person {
public static <T>void a(T data){
}
}
public static <T> Result<T> sucess(){
return new Result<>(20008, "sucess", null);
}
四、@Resource @Autowired
spring的管理机制Bean工厂已经把对象创建好了 你只需要调用就行!
一般代码中对象普遍是new Class把对象实例出来,注入之后呢,spring帮你new好了,你可以直接用了
@Resource主要做依赖注入,从容器中自动获取bean,作用如下:
在启动Spring时,首先要启动容器
在启动Sprng容器时,会默认寻找容器扫描范围内的可加载的bean,然后查找哪些bean上的属性和方法有@resource注解
找到@resource注解后,判断其name属性是否为空,若为空,看Spring容器中的bean中的id与@resource要注解的那个变量属性名是否相同,如相同,匹配成功;如不同,看spring容器中bean的id对应的类型是否与@resource要注解的那个变量属性对应的类型是否相等,若相等,匹配成功,若不相等,匹配失败
如果@resource注解括号中的name属性不为空,看name的属性值和容器中的bean的id名是否相等,如相等,则匹配成功,如果不相等,则匹配失败
@Resource和@Autowired注解都是用来实现依赖注入的。只是@Autowired按by type自动注入,而@Resource默认按by name自动注入
@Autowired 和 @Resource 都是用来实现依赖注入的注解(在 Spring/Spring Boot 项目中),但二者却有着 5 点不同:
来源不同:@Autowired 来自 Spring 框架,而 @Resource 来自于(Java)JSR-250;
依赖查找的顺序不同:@Autowired 先根据类型再根据名称查询,而 @Resource 先根据名称再根据类型查询;
支持的参数不同:@Autowired 只支持设置 1 个参数,而 @Resource 支持设置 7 个参数;
依赖注入的用法支持不同:@Autowired 既支持构造方法注入,又支持属性注入和 Setter 注入,而 @Resource 只支持属性注入和 Setter 注入;
编译器 IDEA 的提示不同:当注入 Mapper 对象时,使用 @Autowired 注解编译器会提示错误,而使用 @Resource 注解则不会提示错误。
https://www.jb51.net/article/260980.htm
五、@Component和@Bean
-
@Component 和 @Bean 是两种使用注解来定义bean的方式。
-
@Component(和@Service和@Repository)用于自动检测和使用类路径扫描自动配置bean。注释类和bean之间存在隐式的一对一映射(即每个类一个bean)。这种方法对需要进行逻辑处理的控制非常有限,因为它纯粹是声明性的。
-
@Bean用于显式声明单个bean,而不是让Spring像上面那样自动执行它。它将bean的声明与类定义分离,并允许您精确地创建和配置bean。
-
@Bean则常和@Configuration注解搭配使用
1.Component注解表明一个类会作为组件类,并告知Spring要为这个类创建bean。
2.Bean注解告诉Spring这个方法将会返回一个对象,这个对象要注册成Spring应用上下文中的bean。通常方法体包含了最终产生bean实例的逻辑。
-
@Autowired或者@Resource注解注入
-
为什么有了@Compent,还需要@Bean呢?
如果想将第三方的类变成组件,你又没有没有源代码,也就没办法使用@Component进行自动配置,这种时候使用@Bean就比较合适了。不过同样的也可以通过xml方式来定义。
另外@Bean注解的方法返回值是对象,可以在方法中为对象设置属性。
另外了解一下Spring的Starter机制,就是通过@Bean注解来定义bean。可以搭配@ConditionalOnMissingBean注解
@ConditionalOnMissingClass注解,如果本项目中没有定义该类型的bean则会生效。避免在某个项目中定义或者通过congfig注解来声明大量重复的bean。
区别:
- Component通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中
- Bean注解通常是我们在标有该注解的方法中定义产生这个bean的逻辑。
- Component用在类上,Bean用在方法上。