项目源码部分
记录学习过程中遇到的不懂的地方,答案主要来自于百度。
mogu_admin
annotion
-
application.yml和bootstrap.yml的不同?
bootstrap.yml 和 application.yml 都可以用来配置参数。
bootstrap.yml 用来程序引导时执行,应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。一旦bootStrap.yml 被加载,则内容不会被覆盖。
application.yml 可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。引用
-
@interface?
使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。
在编写接口的时候,通常会先对参数进行一次校验,这样业务逻辑代码就略显冗杂,如果可以把校验参数的代码进行统一管理,在方法或者属性上直接添加注解就可以实现参数的校验,就可以提升代码编写的效率。引用
注解@Retention可以用来修饰注解,是注解的注解,称为元注解。
常见元注解详情 元注解:
1.@Target,
2.@Retention,
3.@Documented,
4.@Inherited -
@Slf4j?
很简单的就是为了能够少写两行代码,不用每次都在类的最前边写上:
private static final Logger logger = LoggerFactory.getLogger(this.XXX.class);
我们只需要在类前面添加注解@Slf4j,即可使用log日志的功能了
使用十分方便,和以前的logger一样用,有info,debug,error等等 引用 -
@Component?
@Component是Spring框架中的一个通用注解,用于标记一个类为组件,让Spring能够在应用程序启动时自动扫描并加载这些组件。引用
@Component与@Bean的区别与联系 引用
-
@Aspect?
AOP思想:
AOP(Aspect Oriented Programming)是一种面向切面的编程思想。面向切面编程是将程序抽象成各个切面,即解剖对象的内部,将那些影响了多个类的公共行为抽取到一个可重用模块里,减少系统的重复代码,降低模块间的耦合度,增强代码的可操作性和可维护性。AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理、增强处理。
@Aspect的使用以及基本概念:
1.切面类 @Aspect: 定义切面类,加上@Aspect、@Component注解2.切点 @Pointcut
3.Advice,在切入点上执行的增强处理,主要有五个注解:
@Before 在切点方法之前执行 @After 在切点方法之后执行 @AfterReturning 切点方法返回后执行 @AfterThrowing 切点方法抛异常执行 @Around 属于环绕增强,能控制切点执行前,执行后
4.JoinPoint :方法中的参数JoinPoint为连接点对象,它可以获取当前切入的方法的参数、代理类等信息,因此可以记录一些信息,验证一些信息等;
5.使用&&、||、!、三种运算符来组合切点表达式,表示与或非的关系;
6.@annotation(annotationType) 匹配指定注解为切入点的方法;引用
-
ServletRequestAttributes?
用于获取request和session请求信息的。引用 -
redisUtil.get?
redis基本增删改查操作。引用
分隔符之类的变量也可以变量存取在数据库中,便于改动后修改。 -
QueryWrapper?
queryWrapper是mybatis plus中实现查询的对象封装操作类,可以封装sql对象,包括where条件,order by排序,select哪些字段等等,引用//构建一个查询的wrapper QueryWrapper<User> wrapper = new QueryWrapper<User>(); //年龄20-30之间的 wrapper.between("age",20,30); //未删除 wrapper.eq("del_flag",0); //创建时间降序 wrapper.orderByDesc("create_time"); List<User> list = userMapper.selectList(wrapper);
-
MethodSignature?
MethodSignature 属于 Spring AOP 框架,位于 org.aspectj.lang.reflect 包下。主要用于 Spring AOP 中,用于在切面中获取被代理方法的签名信息,方便切面进行条件匹配、日志记录等操作。引用方法名 功能
point.getSignature() 封装了被注解所修饰的方法所在类的信息,得到的是方法签名(方法名和参数类型)
point.getTarget() 封装了被注解所修饰的方法的信息
point.getArgs() 封装了被注解所修饰的方法的参数信息
point.getSignature().getName() 被修饰的方法的方法名
point.getSignature().getMethod() 封装了被修饰的方法的信息 引用 -
method.getAnnotation()?
java.lang.reflect.Method.getAnnotation(Class annotationClass)方法如果存在这样的注释,则返回指定类型的元素的注释,否则为null。
就是获取该类或方法的注解信息。 引用 -
method.getDeclaringClass()?
此方法返回声明方法的Class 对象。引用 -
point.proceed()?
#环绕通知=前置+目标方法执行+后置通知,proceed方法就是用于启动目标方法执行的。 引用
config
-
@Configuration?
@Configuration详解,功能:将想要的组件添加到容器中
现在的Spring Boot已经不需要向以前一样了,有一个注解@Configuration(翻译:配置)可以供使用
1.创建一个类。
2.使用注解@Configuration,告诉Spring Boot这是一个配置类。
这个时候在类里边不能写bean标签了需要使用@bean注解,想要构建出user和pet对象需要自己将它创造出来。
@bean:给容器中添加组件,以方法名作为组件的id。返回类型为组件类型,返回的值,就是组件在容器中的实例 引用 -
@Value?
@Value()注解可以用来将外部的值动态注入到Bean中,在@Value注解中,可以使用 ${} 和 #{} 区别
@Value("${}"): 可以获取对应助兴文件中定义的属性值 @Value("#{}"):表示SpEl表达式通常来获取bean的属性,或者调用bean的某个方法
-
@Primary
其作用与功能,当有多个相同类型的bean时,使用@Primary来赋予bean更高的优先级。引用 -
DruidDataSource()?
Druid是阿里巴巴开源平台上的一个数据源连接池的实现,结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控Druid可以很好的监控DB连接池和SQL执行情况,天生就是针对监控而生的DB连接池。
DruidDataSource 是阿里写出来的一个数据源, 它不仅可以获取数据库连接,还把这些数据库连接管理了起来,也就是所谓的数据库连接池。这样的话,当通过该数据源获取数据库连接的时候,如果数据库连接池里有可以使用的连接,那么就直接返回该连接,就省的每次获取数据库连接都要创建了。
-
ServletRegistrationBean()?
在 Filter 的注册中,我们知道有一种方式是定义一个 Spring 的 Bean FilterRegistrationBean来包装我们的自定义 Filter,从而让 Spring 容器来管理我们的过滤器;同样的在 Servlet 中,也有类似的包装 bean: ServletRegistrationBean -
Arrays.asList()?
该方法是将数组转化成List集合的方法。List list = Arrays.asList(“a”,“b”,“c”);
注意:
(1)该方法适用于对象型数据的数组(String、Integer…)
(2)该方法不使用于基本数据类型的数组(byte,short,int,long,float,double,boolean)
(3)该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新
(4)不支持add()、remove()、clear()等方法
引用 -
druid webStatFilter()配置?
WebStatFilter用于采集web-jdbc关联监控的数据。引用 -
druid statViewServlet()配置?
Druid内置提供了一个StatViewServlet用于展示Druid的统计信息。这个StatViewServlet的用途包括:
提供监控信息展示的html页面
提供监控信息的JSON API -
Swagger下的public Docket createRestApi()?
通过createRestApi()函数创建Docket的Bean之后,apiInfo()用来创建该Api的基本信息(这些基本信息会展现在文档页面中)。select()函数返回一个ApiSelectorBuilder实例用来控制哪些接口暴露给Swagger来展现,本例采用指定扫描的包路径来定义,Swagger会扫描该包下所有Controller定义的API,并产生文档内容(除了被@ApiIgnore指定的请求)。
引用Swagger的详细步骤与解读 引用
-
Nginx — 正则语法
引用
global
- 基类通过final static 关键字声明字符串常量,实际调用的类继承基类。保证系统的可拓展性和可维护性。
restapi
-
@RestController?
Controller, RestController的共同点都是用来表示Spring某个类的是否可以接收HTTP请求。
Controller, RestController的不同点
@Controller:标识一个Spring类是Spring MVC controller处理器。@Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面。在方法上加@ResponseBody注解,也可以返回实体对象。引用
-
@Validated?
@Validated(addGroup.class)就是给参数进行了分组校验addGroup.class:是一个接口类,简单的来说:就是用来给参数做标记的(里面不需要写任何代码)
-
BindingResult?
@Valid和BindingResult配套使用,@Valid用在参数前,BindingResult作为校验结果绑定返回,如果@Valid不起作用,换@Validated试试。bindingResult.hasErrors()判断是否校验通过,校验未通过,bindingResult.getFieldError().getDefaultMessage()获取在TestEntity的属性设置的自定义message,如果没有设置,则返回默认值"javax.validation.constraints.XXX.message"。
引用
我的理解:BindingResult就是通过@Validated的效验结果信息 -
Serializable接口?
任何类型只要实现了Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中。 引用 -
@Constraint?
@Constraint注解是Java Bean Validation框架中的一个注解,用于自定义约束注解,即自定义校验规则。通过在自定义注解上添加@Constraint注解,可以将该注解标记为一个自定义约束注解。同时,需要指定一个实现了ConstraintValidator接口的验证器类,用于验证该注解所标记的字段或参数是否符合自定义的校验规则。
@Constraint注解有以下属性:
validatedBy:用于指定实现了ConstraintValidator接口的验证器类。该属性的值是一个Class对象数组,可以指定多个验证器类。
message:用于指定当校验失败时,所返回的错误信息。可以使用占位符{},在校验器中使用具体的参数替换。
groups:用于指定分组,即根据不同的分组应用不同的校验规则。
payload:用于指定元数据,即可以通过该属性传递一些额外的验证信息。
引用 -
@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)
@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”)Json传参格式化:
添加@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, timezone = “GMT+8”)
url传参格式化:
添加@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)
引用 -
@RequestBody?
1、@RequestBody 主要用来接收前端传递给后端的 json 格式的数据的(请求体中的数据的),有一个属性 required,表示参数是否必须要传,默认为 true.2、GET 方式无请求体,所以 @RequestBody 接收数据时,前端必须是 POST 方式进行提交,然后给页面的数据默认也是 json
3、同一个方法中,@RequestBody 与 @RequestParam() 可以同时使用,前者最多只能有一个,后者可以有多个,
4、@RequestBody 接收的是请求体里面的数据,@RequestParam 接收的是 key-value 里面的参数。
引用 -
Collection?
引用 -
@RefreshScope?
@RefreshScope注解是Spring Cloud中的一个注解,用来实现Bean中属性的动态刷新。在微服务中不重新启动也能更新Bean中属性。引用
security
-
AuthenticationEntryPoint?
AuthenticationEntryPoint : spring security 中的一个接口,用于处理认证失败或者未认证的请求。当用户尝试访问受保护的资源而未经过身份验证,,或者身份验证失败的时候,调用。
可能用于跳转到登录页面或其他处理操作。引用 -
@Qualifier?
四种用法:
第 1 种:从多个候选 bean 中选择一个
第 2 种:标注在类上,对 bean 进行分组
第 3 种:标注在方法上,对 bean 进行分组
第 4 种:自定义@Qualifier
引用 -
Jackson2JsonMessageConverter()?
依赖:<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>
其作用是将对象序列化为 JSON 格式。
引用