注解
实体类注解
@Data注解是lombok.jar包下的注解,该注解通常用在实体bean上,不需要写出set和get方法
@Data相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集
@EqualsAndHashCode注解会生成equals(Object other) 和 hashCode()方法
@EqualsAndHashCode(callSuper = true),callSuper默认为false,即默认不适用父类中属性判断
@EqualsAndHashCode(exclude = “字段名”),通过参数exclude指定排除属性
@EqualsAndHashCode(of = “字段名”),通过参数of指定使用的属性
@EqualsAndHashCode(callSuper = true)//比较父类属性
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class AlarmPage extends BasePage {
private static final long serialVersionUID = 6316286752401821459L;
private String element;
}
@Data注解
@EqualsAndHashCode注解详解
@JsonIgnoreProperties类注解
@JsonInclude(JsonInclude.Include.NON_NULL)注解
@Builder注解将类转变为建造者模式
@Data
@Builder
public class Emp {
private int id;
private String name;
private int dept_id;
private int age;
}
Emp e2 = Emp.builder().age(10).dept_id(1).id(1).build();
dto参数校验及统一异常处理
@Valid 和 @Validated 注解用法
@ControllerAdvice和@ExceptionHandler(Exception.class)统一异常处理
dto参数校验及统一异常处理
springboot定时任务
@Scheduled定时任务注解
@PostConstruct注解,使用在方法上标注该方法是Bean的初始化方法
@EnableScheduling注解,开启定时任务的执行,此时spring容器才可以识别@Scheduled标注的方法,然后自动定时执行。
springboot定时任务
FTP(File Transfer Protocol)有两种数据传输模式:主动模式(Active Mode)和被动模式(Passive Mode)。
它们的区别主要体现在数据连接的建立方式上。
主动模式(Active Mode):
客户端(FTP 客户端)向 服务器端(FTP 服务器)发起连接请求。
客户端随机选择一个端口(通常是一个高端端口,比如1024以上),并向服务器的端口21发起连接,用于传输命令。
当需要传输文件时,服务器从其端口20向客户端随机选择的端口建立数据连接,用于数据传输。
主动模式需要服务器能够直接连接到客户端的数据端口,这在某些网络环境下可能会遇到防火墙的限制或者NAT设备的问题。
被动模式(Passive Mode):
客户端向 服务器端发起连接请求,并要求服务器分配一个随机的高端端口(比如1024以上)用于数据传输。
客户端先与服务器的端口21建立控制连接,发送 PASV 命令请求进入被动模式。
服务器在一个大范围的端口(通常是1024以上的一段范围)中选择一个端口,然后通知客户端。
客户端通过这个被动模式下服务器指定的数据端口与服务器建立数据连接,进行文件传输。
被动模式通常能够避免主动模式中因为防火墙或NAT设备的限制而无法建立数据连接的问题,因为数据连接是由客户端发起的。
总结:
主动模式是服务器端向客户端发起数据连接,而被动模式是客户端向服务器端发起数据连接。
主动模式需要服务器端开放端口用于数据传输,可能会受到防火墙和NAT设备的限制。
被动模式通过在服务器端随机选择一个端口进行数据传输,更容易在复杂网络环境下使用,但需要客户端能够接收来自服务器端的数据连接请求。
springboot读取自定义配置
@Value和@ConfigurationProperties(prefix = “前缀”)注解
springboot读取自定义配置
springboot拦截器和过滤器
@WebFilter(web过滤器)和@ServletComponentScan(servlet组件扫描)
springboot拦截器和过滤器
@Controller和@RestController的区别
@Controller注解适用于传统的 Web 应用程序,处理请求并渲染视图。
@RestController注解适用于构建 RESTful Web 服务,将@Controller 和@ResponseBody注解组合在一起,返回数据而不是视图。
@Controller和@RestController的区别
@Autowired和@Resource区别
1,来源不同:@Autowired 来自 Spring 框架,而 @Resource 来自于JDK提供的注解。
依赖查找的顺序不同:@Autowired先根据类型查询,再根据名称查询,
而@Resource先根据名称,如果存在多个名称,再根据类型查询;
2,支持的参数不同:@Autowired 只支持设置 1 个required参数,
而@Resource 支持设置name="xxx",type = XXX.class参数;
3,依赖注入的用法支持不同:@Autowired 支持构造方法注入,属性注入和 Setter 注入,
而@Resource 只支持属性注入和Setter 注入;
4,编译器 IDEA 的提示不同:当注入Mapper对象时,使用@Autowired 注解编译器会提示错误,而使用@Resource注解则不会提示错误。
5,@Autowired是默认通过类型注入,如果存在多个类型,
则配合@Qualifier注解,通过名称注入(@Qualifier注解类似于条件筛选,可以根据bean的名称注入);
也可以使用@Primary注解加在bean实现类上设置主次。
@Autowired 注入Mapper接口时报红色下划线警告
https://blog.youkuaiyun.com/zsy3757486/article/details/134457653
每层注解
@RestController 使用在web层类上用于实例化Bean
@Service 使用在service层类上用于实例化Bean
@Repository 使用在dao层类上用于实例化Bean
@Component 使用在类上用于实例化Bean
@Scope 标注Bean的作用范围
@PostConstruct 使用在方法上标注该方法是Bean的初始化方法
@PreDestroy 使用在方法上标注该方法是Bean的销毁方法
@PropertySource 用于加载.properties 文件中的配置
自动配置注解
@Configuration、@Bean:基于Java代码的bean配置
@ConditionalOn:设置自动配置条件依赖
@EnableConfigurationProperties、@ConfigurationProperties:读取配置文件转换为bean
@EnableAutoConfiguration、@Import:实现bean发现与加载
@Configuration 用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解
@ComponentScan 用于指定 Spring 在初始化容器时要扫描的包。
@Bean 使用在方法上,标注将该方法的返回值存储到 Spring 容器中
@Import 用于导入其他配置类
springsecurity注解
/**
* Security 主配置文件
*/
/*
* EnableWebSecurity 组合注解
* 加载了WebSecurityConfiguration配置类, 配置安全认证策略。
* 加载了AuthenticationConfiguration, 配置了认证信息。
* 它的作用是用于开启Web安全性支持。当@EnableWebSecurity注解存在时,
* Spring Security的默认配置将会被应用。
*/
@EnableWebSecurity
/*
* 方法级别权限控制
*/
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
//省略
}
@RestController
@RequestMapping("/order")
public class OrderController {
private final IOrderService orderService;
@Autowired
public OrderController(IOrderService orderService) {
this.orderService = orderService;
}
/**
* api 拦截配置项
* -------------------------------------------------------------
* anyRequest | 匹配所有请求路径
* access | SpringEl表达式结果为true时可以访问
* anonymous | 匿名可以访问
* denyAll | 用户不能访问
* fullyAuthenticated | 用户完全认证可以访问(非remember-me下自动登录)
* hasAnyAuthority | 方法可以传入多个权限,只有用户有其中任意一个权限就可以访问对应资源
* hasAnyRole | 如果有参数,参数表示角色,则其中任何一个角色可以访问
* hasAuthority | 如果有参数,参数表示权限,则其权限可以访问
* hasIpAddress | 如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问
* hasRole | 要求有对应的角色才可以访问,但是它内部会把我们传入的参数拼接上 ROLE_ 后再去比较
* permitAll | 用户可以任意访问
* rememberMe | 允许通过remember-me登录的用户访问
* authenticated | 用户登录后可访问
* -----------------------------------------------------------------
*/
@PreAuthorize("hasAuthority('user:order:create')")
@PostMapping("/create")
public Object create(@RequestBody @Validated OrderDTO orderDTO) {
return orderService.createOrder(orderDTO);
}
}
@Async注解
@DS、@DSTransactional注解
@PathVariable注解
url中使用占位符进行参数绑定时,@PathVariable注解进行占位符的匹配
@GetMapping(value="/user/{userId}/roles/{roleId}")
public String getLogin(@PathVariable("userId") String userId,
@PathVariable("roleId") String roleId){
System.out.println("User Id : " + userId);
System.out.println("Role Id : " + roleId);
return "hello";
}