spring boot常用注解(刨析原理一篇看懂)

Autowired与 Resource的区别

1、Autowired与Resource都是要装配bean

Autowired是通过byType来注入 Resource是同通过byName来注入

一、Autowired

Autowired默认是按类型(type也就是参数化类型)装配(这个注解是属于spring的),默认情况下Autowired要求依赖对象必须存在,如果想要允许他空值也就是null 可以设置它的required属性为false 格式为:@Autowired(required=false),如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:

@Autowired` `()` `@Qualifier` `(` `"baseDao"` `)``private` `BaseDao baseDao;

二、Resource

@Resource(这个注解属于J2EE的),默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。用这个注解是因为不用写set方法,减少与spring的耦合

三、Value

@Value(“${}”):value的格式

value注解的作用是将我们配置文件的属性读出来

四、Builder

builder它的作用就是在你使用的地方生成一个构造器与this方法

this就是区分全局与形参 然后this就是选择比较远的那个也就是全局

五、有参构造与无参构造

  • 构造方法的使用是用类名 构造函数也是与类名相同

  • 也就是说构造就是跟类名相同的方法或者函数

  • 还有就是如果类中没有构造函数那么你的类自带一个无参构造

  • 构造函数不能有返回值g

  • 有参构造就是有参数也就是有值的构造方法或者构造函数

  • 无参构造就是没有参数也就是没有值的构造方法或者构造函数

六、启动类注解

@SpringBootApplication

启动类为什么叫这个名字就是因为 springboot框架后面加的是你的默认的配置类 application也就是程序的入口

启动类的8个注解就是为了扫描你的所有包就是所有的Bean就是容器 因为类默认有Bean

七、自动装配原理

byType(类型)通过类型来扫描bean

byName(名称) 通过名称来扫描bean

constructor(构造器)通过构造来扫描bean 包括构造函数与构造方法

基于注解的自动装配有三种

@Autowired @Resource @Value

八、CrossOrigin

这个注解是用于前后端联调时在controller中使用

  • 在@RequesMapping注解上面使用作用就是在

  • 这个注解中可以使用它的所有的源与http 它的底层中有俩个重要的参数

  • 在这个注解中有俩个重要的参数一个是orgins是允许访问的域的地址

  • 另一个是maxAge是缓存持续的最大时间(单位是秒)

    #

    九、Target与Retention

    • @Target为注释类型的程序元素的种类

    • @Retention为注释类的生命周期

    • 很多注解自带这俩个注释如启动类与,RequestMapping

    • 这俩个注解都拥有生命周期:java源文件(java文件)-->class文件--->内存中的字节码

    • 定义注解需要使用@interface 并在接口上面注明@Rentention或者Targe也可以把spring的注解加上再使用

十、@RequestMapping

  • 表示共享映射,如果没有指定的请求方式,将接受GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT所有的HTTP请求方式。

  • @GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping 都是HTTP方法特有的快捷方式@RequestMapping的变体,分别对应具体的HTTP请求方式的映射注解,如果没有指定请求方式这个注解可以包含所有的请求方式。

  • 你还可以在你的controller上写请求方式注解括号中method(method是参数)写请求方式RequestMethod.GET)

十一、@Repository

  • @Repository和@Controller、@Service、@Component的作用差不多,都是把对象交给spring管理。@Repository用在持久层的接口上,这个注解是将接口的一个实现类交给spring管理。

  • 这是因为该注解的作用不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。 用于封装不同的持久层框架抛出的异常,使得异常独立于底层的框架。

十二、springboot自动装配

  • @SpringBootConfiguration继承自©Configuration,二者功能也一致,标注当前类是配置类,并会将当前 类内声明的一个或多个以@Bean注解标记的方法的实例纳入到Spring容器中,并且实例名就是方法名。

  • @EnableAutoConfiguration借助@lmport的支持,收集和注册特定场景相关的bean 定义。也是借助@lmport的帮助,将所有符合自动配置条件的bean定义加载到loC 容器中来

  • @ComponentScan这个注解在Spring中很重要,它的功能其实就是自动扫描并加载符合条件的组件

  • @Documented是元注解,可以修饰其他注解。许多注解头部都有@Documented注解

  • @Inherited是一个标识,用来修饰注解 作用:如果一个类用上了@Inherited修饰的注解,那么其子类也会继承这个注解

  • 剩下俩个注解在第九题

    自动装配原理:

    springboot启动时,是依靠启动类的main方法来进行启动的,而main方法中执行的是SpringApplication.run()方法,而SpringApplication.run()方法中会创建spring的容器,并且刷新容器。而在刷新容器的时候就会去解析启动类,然后就会去解析启动类上的@SpringBootApplication注解,而这个注解是个复合注解,这个注解中有一个@EnableAutoConfiguration注解,这个注解就是开启自动配置,这个注解中又有@Import注解引入了一个AutoConfigurationImportSelector这个类,这个类会进过一些核心方法,然后去扫描我们所有jar包下的META-INF下的spring.factories文件,而从这个配置文件中取找key为EnableAutoConfiguration类的全路径的值下面的所有配置都加载,这些配置里面都是有条件注解的,然后这些条件注解会根据你当前的项目依赖的pom以及是否配置了符合这些条件注解的配置来进行装载的。

  • 启动类要跟你的包同级

十三、@Mapper

@Mapper: 这个注解一般使用在Dao层接口上(就是你的接口中),相当于一个mapper.xml文件,它的作用就是将接口生成一个动态代理类。加入了@Mapper注解,目的就是为了不再写mapper映射文件。这个注解就是用来映射mapper.xml文件的。

使用@mapper后,不需要在spring配置中设置扫描地址,通过mapper.xml里面的namespace属性对应相关的mapper类,spring将动态的生成Bean后注入到ServiceImpl中

注意: 在Dao层不要存在相同名字的接口,也就是在Dao不要写重载。因为mapper文件是通过id与接口进行对应的,如果写了两个同名的接口,就会导致mapper文件映射出错。

十四、@Component

  • @Component: 标注Spring管理的Bean,使用@Component注解在一个类上,表示将此类标记为Spring容器中的一个Bean,也就是说很多注解里面自带了这个Component这个注解,就是表示有这个注解的地方就是spring容器中的一个bean

十五、springboot 的分层处理

  • 大致分为五层View层、Contorller层、Service层、Mapper层(又叫Dao层)、Model层。

  • View层:视图根据接收到的数据最终展示页面给用户浏览。与Controller层结合比较紧密,需要二者结合起来协同工作

  • Controller层:负责具体的业务模块流程的控制,响应用户的请求,调用Service层的接口来控制业务流程,决定使用何种视图并准备响应数据。并把接收到的参数传给Mapper,调用Mapper的方法接口。

  • Service层:主要负责业务模块的逻辑应用设计,同时有一些是关于数据库处理的操作,但是不是直接和底层数据库关联,而是首先设计接口,再设计其实现的类,在接口实现方法中需要导入Mapper层,接着再Spring的配置文件中配置其实现的关联。这样就可以在应用中调用Service接口来进行业务处理。

  • Mapper层:主要是做数据持久层的工作,同时提供增删改查(CRUD)工作,Mapper层一样也是先设计接口,而具体实现在mapper.xml 文件里,然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰。

  • Model层:存放了页面需要传递数据对应字段的实体类,它和数据库中对应表字段的属性值保持一致,实现该类的set/get方法。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值