单体架构常用注解合集
JDK自带注解
@Override
在java中如果方法上加@Override的注解的话,表示子类重写了父类的方法。当然也可以不写,写的好处是:
- 可读性提高
- 编译器会校验写的方法在父类中是否存在
元注解
@Target
表示注解可用在哪里:类上、方法上、属性上等等
@Retention
注解的生命周期:源文件中、字节码文件中、运行中
SOURCE 在源文件中有效(即源文件保留)
CLASS 在class文件中有效(即class保留)
RUNTIME 在运行时有效(即运行时保留)
框架注解
@SpringBootApplication
放置在Springboot启动类上,表明该类是开启Springboot容器的入口,它是一个复合注解。里面包含了包扫描,自动注入,配置注入的功能。
@ComponentScan
1、@ComponentScan这个注解在Spring中很重要,它对应XML配置中的元素,@ComponentScan的功能其实就是自动扫描并加载符合条件的组件(比如@Component和@Repository等)或者bean定义,最终将这些bean定义加载到IoC容器中。
我们可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明@ComponentScan所在类的package进行扫描。
注:所有SpringBoot的启动类最好是放在root package下,因为默认不指定basePackages。
2、@ComponentScan告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器。
例如,如果你有个类用@Controller注解标识了,那么,如果不加上@ComponentScan,自动扫描该controller,那么该Controller就不会被spring扫描到,更不会装入spring容器中,因此你配置的这个Controller也没有意义。
3、参数的作用
basePackageClasses:对basepackages()指定扫描注释组件包类型安全的替代。excludeFilters:指定不适合组件扫描的类型。includeFilters:指定哪些类型有资格用于组件扫描。lazyInit:指定是否应注册扫描的beans为lazy初始化。nameGenerator:用于在Spring容器中的检测到的组件命名。resourcePattern:控制可用于组件检测的类文件。scopedProxy:指出代理是否应该对检测元件产生,在使用过程中会在代理风格时尚的范围是必要的。scopeResolver:用于解决检测到的组件的范围。useDefaultFilters:指示是否自动检测类的注释
@EnableAutoConfiguration
@EnableAutoConfiguration 简单概括一下就是,借助@Import的支持,收集和注册特定场景相关的bean定义。
@EnableScheduling是通过@Import将Spring调度框架相关的bean定义都加载到IoC容器。
@EnableMBeanExport是通过@Import将JMX相关的bean定义加载到IoC容器。
而@EnableAutoConfiguration也是借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IoC容器,仅此而已!
@EnableAutoConfiguration作为一个复合Annotation。
@SpringBootConfiguration
@SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类,
并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。
@Inherited
关于java中元注解Inherited 的使用说明
首先解释下元注解,就是用来中声明注解类型时需要使用到的注解。
Inherited作用是,使用此注解声明出来的自定义注解,在使用此自定义注解时,如果注解在类上面时,子类会自动继承此注解,否则的话,子类不会继承此注解。这里一定要记住,使用Inherited声明出来的注解,只有在类上使用时才会有效,对方法,属性等其他无效。
@RestController
相当于@Controller+@ResponseBody,接受客户端请求,并作出响应
- 用户发起请求时,第一步经过前端控制器,
- 但是前端控制器 只负责请求的转发和响应.不做任何业务处理.将请求转发给处理器映射器.
- 处理器映射器接收到前端控制器的请求之后,查询自己维护的服务列表信息.
如果服务列表中没有这个URL的key. 该程序不能处理用户的请求,则返回特定数据,前端控制器接收之后响应用户404.
如果服务列表中有该URL key 则说明请求可以正常执行. 将该方法的对象返回给前端控制器. - 前端控制器将返回的方法进行接收,但是由于前端控制器只负责转发和响应,不能直接执行该方法.所以交给处理器适配器执行.
- 处理器适配器根据方法的类型(xml配置文件/注解/其他方法),处理器适配器在自己的处理器库中挑选一个最为合适的处理器去执行该方
法. 当处理器执行该方法时标识业务开始. 将最终的处理的结果通过ModelAndView对象进行包裹,返回给前端控制器.
ModelAndView: Model: 代表服务器返回的业务数据 View: 服务器端返回的页面的名称 - 视图解析器 将View中的数据进行解析 拼接一个完整的页面路径 前缀/hello后缀
- 视图渲染: 将数据与页面进行绑定. 这样用户就可以在页面中看到具体的数据.
由于现在流行前后端分离. 所以SpringMVC省略了视图解析和视图渲染.只有前5步. 核心注解: @ResponseBody 省略6-7步
@Controller,@Service,@Component
将标志类创建的实例教给spring容器管理
@ResponseBody
将返回的对象转化为JSON串
@RequestBody
将接收的JSON串转化为对象,一般在后端接收axios的put和post请求发送的参数时使用
@RequestMapping("/helloworld")
规定了浏览器访问控制层方法的方式,一般用在类上边,作为该类统一的入口
@GetMapping,@DeleteMapping,@PostMapping,@PutMapping
与@RequestMapping不同的是,上边四种注解规定了具体的请求方式,一般用在方法上
@PathVariable
加在参数前,用来获取RESTful请求方式中占位符{}中的值
@RequestParam
参数名和请求参数名称不同时使用,可以设置默认值
@CrossOrigin
跨域的解决方案之一,适用于单体架构
以下四个注解需要下载lombok插件
@Data
自动生成以下方法
get set toString hashCode equals
@NoArgsConstructor
无参构造
@AllArgsConstructor
全参构造
@Accessors(chain = true)
链式编程
@Autowired
依赖注入,用于描述两个类的关系
- 属性注入(最常用的方式)
1.1. 通过 setter 方法注入Bean 的属性值或依赖的对象
1.2. 使用元素, 使用 name 属性指定 Bean 的属性名称,value 属性或 子节 点指定属性值
2. 构造器注入 2.1 通过构造方法注入Bean 的属性值或依赖的对象,它保证了 Bean 实例在实例化后就可以使用 2.2 构造器注入在 元素里声明属性, 中没有 name 属性
<bean id="p1" class="com.chai.lesson2.Person" scope="prototype"><constructor-arg value="小李" index="0"></constructor-arg><constructor-arg value="18"></constructor-arg>
</bean>
<bean id="p2" class="com.chai.lesson2.Person"><constructor-arg value="jack" index="0"></constructor-arg><constructor-arg type="int"><value>14</value></constructor-arg>
</bean>
Tip:
value:表示你要注入的属性的值
index 表示参数下标
type 指定类型
scope 属性(表示bean的作用域) 可以通过执行springIOC容器来创建对象 的类型
prototype 原型模式(多例模式) 每次调用IOC容器的getBean方法,就会返回一个新的对象(地址)
singleton 单例模式 每次调用都会返回同一个对象
3. 工厂方法注入(很少使用,不推荐)
4. 泛型依赖注入(了解)
@MapperScan(“cn.tedu.dao”)
扫描DAO接口文件所在的包,value值为DAO接口所在的包名的全路径
如果不配置的话会报如下错误:
@Qualifier(“helloServiceImplA”)
设置依赖注入的两种方式
1.按照类型注入
按照属性的类型 去Map集合中查找是否有改类型的对象. 如果有则注入.
2.按照名称注入 根据属性的name 去Map集合中查找对应的KEY
@PropertySource(value = “classpath:/person.properties”, encoding = “utf8”)
让Spring加载该pro文件,指定字符编码为utf8
@Value("${server.port}")
可以从配置文件获取,也可以从配置中心获取
- 从Spring容器内部为属性赋值
- spel表达式(spring的el表达式) ${key}
@Mapper
Mybatis为接口创建代理对象,JDK动态代理对象,Spring容器管理
@SpringBootTest
说明:该注解是SpringBoot程序为了简化后端代码测试,提供了专门的测试AP
@DateTimeFormat(pattern = “yyyy-MM-dd”)
在实体类的日期中所添加的注解,不加默认认为是字符串,不是Date类型
@RestControllerAdvice
定义全局异常的处理类,返回值是一个JSON串
@ExceptionHandler
表示拦截的异常的类型,如果类型匹配,则执行异常方法
@Transactional
事务控制,增删改,用于业务层
属性1: rollbackFor 可以配置特殊的异常类型.遇到某种异常回滚.
属性2: noRollbackFor 可以配置异常类型 遇到某种异常不回滚.
@Configuration
表示这是一个配置类,目的:封装对象,交给Spring容器管理
底层产生一个代理对象
@Bean
描述的是一个方法,将方法的返回值对象,交给Spring容器管理
可以放在@Configuration或者@Component修饰的类里边
单体架构常用注解合集相关推荐
- Centos7常用命令合集
Centos7常用命令合集 管理centos服务器的时候常会对文件进行一些常规操作,除了ftp之外了解在ssh下必要的文件操作命令那也是必不可少的,以下摘录一些常用的文件操作命令: 文件操作: ls ...
- 一、PyTorch Cookbook(常用代码合集)
PyTorch Cookbook(常用代码合集) 原文链接:https://mp.weixin.qq.com/s/7at6y2NcYaxGGN8syxlccA 谢谢作者的付出.
- 常用正则表达式合集与工具
any-rule 维护了一个常用正则表达式合集,并且本身是一个支持 Web/VS Code/idea/Alfred Workflow 多平台的正则表达式工具. image 安装 VS Code 应用商 ...
- 阿里P8架构师谈:大数据架构设计(文章合集)
架构师进阶有一块很重要的内容,就是需要掌握大数据的架构设计,主要涵括: MySQL等关系式数据库,需要掌握数据库的索引.慢SQL.以及长事务的优化等. 需要掌握非关系式数据库(NoSQL)的选型,以及 ...
- anki 新的卡片类型_Anki 常用操作方法合集(一)常用操作1
本文侧重于一些Anki的常用操作方法的整理,操作方法通用于全平台(非教程本文)不适用于老手. 如果你是彻头彻尾的新手请跳转自 <Anki 常用操作方法合集(二)>的第一有很好的详细教程推荐 ...
- 【Python常用函数合集】clip函数、range函数等
你应该听说过,应用Python,可以让你处理一天的重复工作量,缩短到几分钟甚至更短.从此解放上班时间,研究更多更有效率的工作方法.进一步提升工作效率,让工作更出彩.这不是广告,这是实锤图片. 本 ...
- 设计师常用软件合集,有一个你肯定知道!
大家好,我是极客猿小兵,今天给大家推荐设计师常用软件合集,时至今日,设计师可以细分为很行岗位,有平面设计,品牌设计,UI设计,交互设计,游戏UI设计,网页设计,电商设计,插画设计,视频制作等等. 这里 ...
- Javascript常用API合集
常用API合集 一.节点 1.1 节点属性 Node.nodeName //返回节点名称,只读 Node.nodeType //返回节点类型的常数值,只读 Node.nodeValue //返回Tex ...
- fcpx瘦身插件_FCPX常用插件合集
FCPX常用插件合集 精选FCPX特效插件合集 50款Final Cut Pro X的特效插件合集 大小:12 GB 每个插件都附带安装说明 合集包含滤镜.文字.转场.调色.特效.发生器等多种插件,适 ...
- Linux手册大合集,收藏!Linux常用命令合集
收藏!Linux常用命令合集 1. 帮助命令 1.1 man 命令名称,man 的意思是 manual,即手册,对于大多数命令都可以使用这个命令来查看其使用的方法. 1.2 help 命令名称 或者 ...
最新文章
- Druid 大数据分析之快速应用(单机模式)
- boost::signals2::signal_type相关的测试程序
- hadoop需要哪些技术支持
- 老生常谈:装饰者模式
- 【IT笔试面试题整理】字符串转数组+数组转字符串
- 拼的html页面乱,页面分页html拼接
- sql设置id自动增长_JDBC进阶(一):批处理与获取自增长列的值
- PageHelper 分页Total总是为pageSize的问题
- 贵!iPhone 11系列维修费用出炉 最高的可以入手一部华为P30 Pro了…
- php 后端刷新页面
- xml能存图片吗_如何Get大量的图片搜索流量?(分享几大Image SEO技巧!)
- 计算机与艺术就业怎样,就业报告:这些艺术类好就业,这些难就业!
- Python 扯淡的Map-Reduce
- 更换系统后无法catkin_make universal robot 包
- 苹果/安桌点歌系统代码
- php 车牌号限号,机动车限行尾号今天起轮换 周一至周五分别限行 4 和 9、5 和 0、1 和 6、2 和 7、3 和 8...
- Kali中MSF利用永恒之蓝(复现、演示)
- 经典语录用心记忆,总有一句让你受益匪浅!
- 「文末送书」如何让数据分析不脱离业务?
- mysql查询结果某个字段设置为固定值_MySQL使用select查询时,在查询结果中增加一个字段并指定固定值...