spring @Aspect注解:https://blog.csdn.net/qq_36761831/article/details/90299680
@Aspect(切面): 通常是一个类,里面可以定义切入点和通知
标识一个前置增强方法,相当于BeforeAdvice的功能
可以在通知方法中声明一个类型为 JoinPoint 的参数. 然后就能访问链接细节. 如方法名称和参数值.
public void doBefore(JoinPoint joinPoint)
final增强,不管是抛出异常或者正常退出都会执行。
•环绕通知是所有通知类型中功能最为强大的, 能够全面地控制连接点. 甚至可以控制是否执行连接点.
•对于环绕通知来说, 连接点的参数类型必须是 ProceedingJoinPoint . 它是 JoinPoint 的子接口, 允许控制何时执行, 是否执行连接点.
•在环绕通知中需要明确调用 ProceedingJoinPoint 的 proceed() 方法来执行被代理的方法. 如果忘记这样做就会导致通知被执行了, 但目标方法没有被执行.
•注意: 环绕通知的方法需要返回目标方法执行之后的结果, 即调用 joinPoint.proceed(); 的返回值, 否则会出现空指针异常
带有通知的连接点,在程序中主要体现为书写切入点表达式
@Component注解的解析
@controller 控制器(注入服务)
用于标注控制层,相当于struts中的action层
@service 服务(注入dao)
用于标注服务层,主要用来进行业务的逻辑处理
@repository(实现dao访问)
用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件
@component (把普通pojo实例化到spring容器中,相当于配置文件中的
)
泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。
spring框架中@PostConstruct的实现原理
@PostConstruct-简书
被注解的方法,在对象加载完依赖注入后执行。
此注解是在Java EE5规范中加入的,在Servlet生命周期中有一定作用,它通常都是一些初始化的操作,但初始化可能依赖于注入的其他组件,所以要等依赖全部加载完再执行。与之对应的还有@PreDestroy,在对象消亡之前执行,原理差不多,这里不做过多介绍。
被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。
@Scheduled 定时任务总结
@Scheduled 注解各参数详解
用于定时执行的方法
如果有多个定时器,要开启线程池
setScheduler(Executors.newScheduledThreadPool(5))
https://www.jianshu.com/p/546631cc2b8f
在Spring Boot项目中,通过@EnableScheduling可启用Spring自带的定时任务支持,在通过@Scheduled注解定义定时任务,但是通过注解只能编写固定时间的定时任务,无法动态调整定时间隔,可通过实现SchedulingConfigurer接口实现动态定时任务注册。
定时任务,类
SpringBoot定时任务@EnableScheduling
启动类里面使用@EnableScheduling 注解开启功能,自动扫描
异常处理3方法:https://www.cnblogs.com/lvbinbin2yujie/p/10574812.html#type2
统一异常处理:https://www.jianshu.com/p/b88fcadfe737
使用 @ControllerAdvice 实现全局异常处理,只需要定义类,添加该注解即可定义
在该类中,可以定义多个方法,不同的方法处理不同的异常,例如专门处理空指针的方法、专门处理数组越界的方法
(也可用于全局数据绑定和全局数据预处理)
@ExceptionHandler 注解用来指明异常的处理类型,即如果这里指定为 NullpointerException,则数组越界异常就不会进到这个方法中来。
@ExceptionHandler(Exception.class)
https://www.cnblogs.com/zdj-/p/8693071.html
从exception中获取bindingResult
@Valid 和 BindingResult 是一一对应的,如果有多个@Valid,那么每个@Valid后面跟着的BindingResult就是这个@Valid的验证结果
默认校验失败后会让方法抛出Unchecked Exception,在springboot中默认是会让其跳转到error页面,所以只要添加一个这个异常的处理器就行:
什么是跨域?跨域解决方法:https://blog.csdn.net/lambert310/article/details/51683775
SpringBoot 实现前后端分离的跨域访问(CORS):http://www.uml.org.cn/j2ee/201711233.asp?weiid=1347
https://www.cnblogs.com/zhaosq/p/11410682.html
在任意配置类,返回一个新的WebMvcConfigurer Bean,并重写其提供的跨域请求处理的接口,目的是添加映射路径和具体的CORS配置信息。
/**
* 跨域配置
*/
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Bean
public WebMvcConfigurer corsConfigurer()
{
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").
allowedOrigins("https://www.dustyblog.cn"). //允许跨域的域名,可以用*表示允许任何域名使用
allowedMethods("*"). //允许任何方法(post、get等)
allowedHeaders("*"). //允许任何请求头
allowCredentials(true). //带上cookie信息
exposedHeaders(HttpHeaders.SET_COOKIE).maxAge(3600L); //maxAge(3600)表明在3600秒内,不需要再发送预检验请求,可以缓存该结果
}
};
}
}
https://www.cnblogs.com/duanxz/p/7493276.html
@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
@Configuation等价于
https://blog.csdn.net/yusimiao/article/details/97622666
通过 @ConfigurationProperties 注解,我们可以方便的获取application.yml的参数值(可以封装成类)
@ConfigurationProperties(prefix = "外部参数")
举例:
spring boot 使用@ConfigurationProperties:https://www.cnblogs.com/liaojie970/p/8043150.html