Spring基础

Spring基础

IOC:

  • 一种控制反转思想,

    • 讲对象的创建和对象直接的调用,交给Spring管理;
    • 主要目的:为了降低模块之间的解耦;
      • 原始是直接new 创建,
      • 进阶是工厂模式;
      • 终结模式,IOC,控制反转实现;
  • 底层主要功能原理:

    • Xml解析;
    • 工厂模式【解耦合】;
    • 反射;
  • xml配置文件:

    使用< >进行配置,然后使用xml解析吗,获取其中的值:

    <bean id = "" class = "全类名"></bean>
    
    • 使用id作为实例键名【k-v容器】,
    • 全类名通过反射,Class.forName("").newInstance(),获取值;
  • IoC是基于IOC容器实现,容器底层就是对象工厂,IoC容器的两种接口;

    • BeanFactory:IoC基本实现,Spring内部实现,不提供开发人员;
      • 加载配置文件的时候,不会创建对象,再获取对象的时候,才会获取【懒汉模式】
      • 主要实现类:
        • ConfigrableApplicationContext:扩展功能;
    • ApplicationContext:BeanFactory的子接口,提供更强大的功能;
      • 饿汉模式:加载配置文件的时候,会对对象进行创建;
      • 主要实现类:
        • FileSystemXmlApplicationContext:使用的是磁盘路径;
        • ClassPathXmlApplicationContext:使用的类路径;
  • Bean管理:

    • Spring创建对象:

    • Spring属性注入:

    • 两种方式实现以上两种功能;

      • 基于xml配置文件方式实现:

        1. 创建对象:

          使用bean标签:<bean id = "" class = "全类名"></bean>

          • id:唯一标识;
          • class:类的全路径;
          • 默认是无参对象创建;
        2. 注入属性:

          DI:依赖注入;

          • 有参构造注入:

            <bean id = "" class = "全类名">
                <constructor-arg name = "" value = "">			
                </constructor-arg >
                <constructor-arg name = "" value = "">			
                </constructor-arg > // 调用对应的有参构造方法
            </bean>
            
          • set方法注入:

            <bean id = "" class = "全类名">
                <property name = "" value = "">			</property> // 调用对应neme的set方法
            </bean>
            
      • 基于注解方式实现;

  • IOC的Bean管理;

    • 普通bean,定义的类型,就是返回类型;

    • 工厂bean(Factory Bean):定义类型,和返回类型可以不一致;

      • 主要接口: FactoryBean接口,在接口中实现;
    • bean的作用域:单实例还是多实例;

      • 默认是单实例对象;
      • scope属性值:
        • singleton:单实例,加载配置文件的时候,就创建对象;
        • prototype:多实例对象,调用get方法的时候,才会创建对象;
      • Requset和Ssession
    • bean的生命周期:

      1. 通过无参创建实例;

      2. 设置属性值【set方法】;

        把bean传递给bean后置处理器【BeanPostProcessor接口】;

      3. bean的初始化方法【进行配置, init-method = ""属性】;

        把bean传递给bean后置处理器;

      4. bean可以使用;

      5. 当容器关闭后,调用bean销毁方法【进行配置, destroy-method = "" 属性】 == > .close()【子接口ClassPathXmlApplicationContext有一个close()方法】;

        • BeanPostProcessor接口主要方法:
          • postProcessorBeforeInitialization();
          • postProcessorAfterInitialization();
    • Bean管理的自动装配:

      • 通过bean属性是手动装配;
      • 自动装配属性 autowire:
        • byName:根据属性的名称注入;
        • byType:根据属性的类型注入;
    • Bean管理,引入外部属性文件;

      • 通过${键值};
  • 基于注解:

    注解是代码的特殊标记,格式:@注解名称(属性名称 = "属性值", 属性名称 = "属性值");

    • 作用对象;

    • 注解是为简化Xml配置;

    • 创建对象的注解,功能相同,创建Bean实例:

      • @Component:普通层;

      • @Service:业务逻辑层

      • @Controller:Web层

      • @Repository:DAO层;

        引入依赖,开启组件扫描,在类上添加注解;

        • 组件扫描:扫描对应的组件【包含哪些,不包含哪些】;
    • 注解的方式,属性的注入;

      • @AutoWired:根据属性类型装配
      • @Qualifier:根据名称注入;
      • @Resource:以上两种;
      • @Value:不同类型注入;
    • 完全注解开发;

      • 使用配置类代替Xml配置

        @Configuration

        @ConponentScan(basePackages = {"", ""}),然后使用AnnotationConfigAppcalitionContext(SpringConfig.class)加载配置类

  • AOP:面向切面编程;

    • 动态代理:

      • 有接口实现的子类:
        • JDK动态代理,创建接口类代理;
        • 底层是通过反射实现,【对象,方法,参数】
      • 无接口的类:
        • CGLIB动态代理,创建当前子类的代理对象;
    • 术语

      • 连接点:类中的方法,因为增强的是方法;

      • 切入点:实际增强的方法;

        切入点表达式:execution(【权限修饰符】【返回类型】【类全路径】【方法名】(【参数列表】));

      • 通知:增强的逻辑部位;

        • 前置,后置,环绕,异常【catch】,最终【finally】;
      • 切面:把通知应用到切入点的过程;

    • AOP操作:一般基于AspectJ;

posted @ 2025-07-23 21:59  烟雨断桥  阅读(6)  评论(0)    收藏  举报