Spring
@configuration
@configuration注解可以标注到类上,声明这个类为配置类,启动spring就会自动扫描@configuration注解标注的类,将其注册到ioc容器中,并被实例化成bean对象。
如果被@configuration注解标注的类中存在使用@bean注解标注的创建某个类对象的方法,那么,spring也会自动执行使用@bean注解标注的方法,将对应的bean定义信息注册到ioc容器,并进行实例化。
@Configuration注解能够替代Spring的applicationContext.xml文件
@Configuration注解中每个属性的含义如下所示:
value:存入到Spring IOC容器中的Bean的id。
proxyBeanMethods:表示被@Configuration注解标注的配置类是否会被代理,并且在配置类中使用@Bean注解生成的Bean对象在IOC容器中是否是单例对象
@NotNull判空
在开发中,为了代码的稳定性不报空指针异常,经常需要判断前端传过来的值是否为空,为空的话就返回前端值为空的提示,才能进行下一步的操作,例如登录操作需要判断传过来的登录名和密码是否为空
@NotNull使用步骤
- 实体类需要判断的字段上面加上@NotNull注解,并且message配置提示语句
@Data
public class User {
private Integer id;
@NotNull(message = "用户名不能为空")
private String username;
@NotNull(message = "密码不能为空")
private String password;
private String email;
private String phone;
private String idCard;
private Byte sex;
private Byte deleted;
private Date updateTime;
private Date createTime;
}
- controller接口的方法参数加入@Valid注解,表示当前的实体类接收的参数需要根据配置的@NotNull注解判断
@GetMapping("login")
public Result login(@Valid User user) {
System.out.println("测试@notNull注解");
//验证密码操作省略
return Result.suc();
}
-
配置全局异常捕获
不配置的话会抛异常,并且控制台没有打印在方法里面的设置的信息,所以可以看出方法没有走我们的业务代码,而是直接被全局异常捕获了,然后返回给了前端数据,所以需要在全局异常里面捕获一下当前异常,并且要让我们提示语句返回给前端,这样才是合理的。
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
@ExceptionHandler(Throwable.class)
public ErrorResult handleThrowable(Throwable e, HttpServletRequest request) {
ErrorResult error =ErrorResult.fail(ResultCode.SYSTEM_ERROR, e);
log.error("URL:{} ,系统异常: ",request.getRequestURI(), e);
return error;
}
@ExceptionHandler(BindException.class)
public ErrorResult exceptionHandler(BindException e, HttpServletRequest request) {
String failMsg = e.getBindingResult().getFieldError().getDefaultMessage();
ErrorResult error = ErrorResult.fail(ResultCode.SYSTEM_ERROR, e, failMsg);
log.error("URL:{} ,绑定异常:{} ", request.getRequestURI(),failMsg);
return error;
}
}
- 问题
现在是登录接口我们只需要判断username和password,如果是别的接口也是用User类接收的,但是username和password可以为空怎么办?
在NotNull注解里面配置group,需要验证的时候,就在controller参数注解中加上这个groups名称
@ConfigurationProperties
@ConfigurationProperties注解的主要的作用是可以将外部的配置(如从.yaml文件中)绑定并验证到目标类中。
注册条件
@ConditionalOnClass
如果当前环境有User这个类,就注入Dept
//IOC容器中有User这个Bean,就注入这个dept这个bean
@ConditionalOnClass(User.class)
public Dept dept(){
return new Dept();
}