Spring入门

Spring的三层结构:

  • controller:控制层;

  • svervice:逻辑层;

  • dto:数据处理层;

    控制层和逻辑层,逻辑层和数据处理层,分别产生耦合;

怎么解决高耦合情况:

  • 容器思想:将生产者将对象放入容器【控制反转】,消费者从容器取对象【依赖注入】;

  • 控制反转【Inversion Of Control, IOC】:对象的创建控制权转移到外部容器;

    • 注解:@Component,将对象的创建权交给容器;
  • 依赖注入【Dependency Injection, DI】:容器为应用程序提供运行时,所以依赖的资源;

    • 注解:@Autowired,对象自动注入;
  • Bean对象:IOC容器中创建,管理的对象,称之为bean;

  • IOC详解:

    注解 说明 位置
    @Component 声明bean的基础注解 不属于以下三类时的注解
    @Controller @Component的衍生注解 标注在控制器上
    @Service @Component的衍生注解 标注在业务上
    @Repository @Component的衍生注解 标注在数据访问类上【与mybatis整合】
    • 声明控制器bean只能用@Controller;

    • 声明bean的时候,可以通过value指定bean的名字,默认时类名首字母小写;

    • 声明之后,要想生效需要被组件@ComponentScan扫描,它默认包含到@SpringBootApplication注解中,当显示注解时,默认扫描会被覆盖;

      • @SpringBootApplication中的默认扫描范围时启动类所在包及其子类;
  • DI详解:

    • @Autowired注解,是默认按照类型进行注解,对于一个接口如果有多个实现类,那么这个接口对象就存在多个相同的bean【多态的问题】;
      • @Primary:设置优先级解决@Autowired问题;
      • @Qualifier("类名")配合@Autowired使用:指定注入类;
      • @Resource(name = "类名"):jdk提供,按照所给名称注入;
        • @Autowired按照类型注入;

配置文件yml:

  • 默认注入配置信息方法:@Value("${springt.name}");
  • 自动注入:名称相同;
    • 提供@Data注解,给属性get和set方法;
    • 交给IOC容器管理;
    • 由@ConfigurationProperties(prefix = "配置文件的前缀")

过滤器【Filter,拦截对资源的请求,是javaweb的组件之一】:

  • 定义实现Filter接口的类;
  • 加上拦截注解@WebFilter(urlPatterns = "/*"),
  • 并不属于spring的组件,所以在启动类开启Servlet组件@ServletComponentScan
  • 过滤器链,多个过滤器的串联;
    • 执行顺序的优先级和过滤器类名【字符串】的自然排序;
  • 拦截器【Interceptor, Spring提供】
    • "/*":只能拦截一级路径;
    • "/**":能拦截任意路径;
    • 只拦截Spring环境下的请求,Filter过滤器能力更强;

Spring事务管理

  • @Transactional
  • 默认情况下,只有RuntimeException才会回滚;
  • @Transactional(rollbackFor=Excetion.class):控制何种异常类型出现回滚事务;
  • propagation:两个方法都具有事务,而且存在相互调用;
    • 默认【propagation = requires】共用一个事务;
    • 【propagation = requires_new】会挂起当前事务,然后新建一个事务,事务不相互影响;
posted @ 2025-03-26 09:55  烟雨断桥  阅读(7)  评论(0)    收藏  举报