SpringBoot的自动配置原理及ssm实战

SpringBoot的自动配置原理

1.@SpringBootApplication

标注这个注解的类是一个springBoot应用

1.2.@SpringBootConfiguration

springBoot的配置注释

1.2.1.@Configuration

代表SpringBootConfiguration是spring的配置类,本质还是spring的注解

2.@EnableAutoConfiguration

自动配置

2.1.@AutoConfigurationPackage

自动配置包

2.2@Import({AutoConfigurationImportSelector.class})

导入AutoConfigurationImportSelector.class

2.2.1 AutoConfigurationImportSelector.class

1)public String[] selectImports(AnnotationMetadata annotationMetadata) {}
选择组件

img

1)getAutoConfigurationEntry

获取所有的自动配置

2)getCandidateConfigurations

获取到候选配置,需要的时候才导入

3) loadFactoryNames

获取 META-INF/spring.factories 中的资源

3.@ComponentScan

扫描所在包及其子包的的类是否有贴Cmpnent注解,并将其对象交给spring容器

@ConfigurationProperties 绑定对象属性

​ 作用:省去了使用@value进行值的注入,使用该注解可以自动进行值的注入,读取配置文件的内容

这个注解贴在类上,必须保证类的属性名和绑定的参数名相同,默认的绑定的配置文件"application.properties"

@Component
@ToString
@Setter
@ConfigurationProperties(prefix="jdbc")
public class MyDataSource {
    private String driverClassName;
    private String url;
    private String username;
    private String password;
}

SpringBoot项目的实战

注意事项

application.prperties

1.数据库的配置需要设置时区

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql:///rbac?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=admin

2.配置mapper接口的代理类

​ 在主程序类上贴注解@MapperScan,需要标明扫描mapper文件的位置

@SpringBootApplication
@MapperScan("cn.wolfcode.mapper")
public class SsmApplication {
    public static void main(String[] args) {
        SpringApplication.run(SsmApplication.class, args);
    }
}

事务管理

注解的方式实现

业务层的实现类上或者其他 方法上直接贴@Transactional注解

配置代理的方式

springBoot默认使用的是CGLIB动态代理,在配置文件中进行修改代理类为JDK代理

spring.aop.proxy-target-class=false
静态资源的处理
  • 默认情况下,Spring Boot 会从 classpath 下的 /static,/public,/resources,/META-INF/resources 下加载静态资源。
  • 可以在 application.properties 中修改静态资源加载地址。
# 告诉 Spring Boot 什么访问的路径是找静态资源
spring.mvc.static-path-pattern=/static/**
统一异常处理

将出现的错误视图导向到静态文件中,状态码就是视图的名称,classpath:/static/error/

​ 出现 404 错误 -> classpath:/static/error/404.html

​ 出现 5xx 错误 -> classpath:/static/error/5xx.html

统一异常处理

自定义一个控制器增强,用于处理异常,一般用于5xx错误,使注解

@ControllerAdvice:对controller增强,使用的动态代理

@ExceptionHandler:指定对哪一种异常进行处理

//在这个方法统一处理异常,一般用于处理5xx异常
@ControllerAdvice //对Controller的增强,使用的是动态代理
public class ExceptionControllerAdvice {
   //指定对那种异常处理
   @ExceptionHandler(RuntimeException.class)
   public String handleException(RuntimeException e, Model model) {
       System.out.println("异常信息");
       return "xxxx";
   }
}
添加拦截器

编写拦截器

@Component
public class LoginIntercepter implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("登录检查");
        return true;  //放行
    }
}

配置拦截器

定义一个配置类(单独建包),实现WebMvConfig接口,需要在addInterceptors方法中注册拦截器

@Configuration
public class MyMvcConfigure implements WebMvcConfigurer {
    @Autowired
    private LoginIntercepter loginIntercepter;
    //注册拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginIntercepter)
                .addPathPatterns("/**")//对哪些资源做拦截
                //不对哪些资源做拦截,
                // 访问时的路径:http://localhost:8080/static/index.html
                //在配置文件中还必须添加:spring.mvc.static-path-pattern=/static/**
                .excludePathPatterns("/static/**");
    }
}

系统日志

使用日志的作用

1.日志框架更为灵活,可以将输出和代码进行分离,

2.日志框架可以定义日志的输出环境,控制台,文件,数据库

3.方便定义日志的输出格式和级别

输出日志的方式

方式一:

​ 在需要输出日志的地方进行创建对象

 Logger logger = LoggerFactory.getLogger(CourseController.class);
        logger.info("查询可成功");
        logger.debug("查询可成功");
        logger.error("查询可成功");
        logger.trace("查询可成功")

方式二:
使用注解**@Slf4j**贴在类上,不用重新new对象,直接使用log.xxx进行输出

log.info("插入成功");
log.debug("插入成功");
log.warn("插入成功");

日志的级别

级别越高,输出的内容就少

​ trace<debug<info<warn<error

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值