• Spring IOC


    1. IOC 底层原理

    程序设计的目标高内聚,低耦合。

    底层原理:xml解析, 工厂模式(ioc容器就是对象工厂),反射(通过字节码创建对象和获取对象的属性/方法)

    说明:

    1、 IOC 思想基于 IOC 容器完成, IOC 容器底层就是对象工厂
    2、 Spring 提供 IOC 容器实现两种方式:(两个接口)
    (1) BeanFactory: IOC 容器基本实现,是 Spring 内部的使用接口,不提供开发人员进行使用
    * 加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象
    (2) ApplicationContext: BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人
    员进行使用

    * 加载配置文件时候就会把在配置文件对象进行创建

    3、 ApplicationContext 接口有实现类

    FileSystemXmlApplicationContext: 填文件路径

    ClassPathXmlApplicationContext: 填类路径

    (Bean 管理: 1. 创建对象  2. 注入属性)

    2. IOC 操作 Bean 管理(基于 xml)

    1、基于 xml 方式创建对象
    (1)在 spring 配置文件中,使用 bean 标签,标签里面添加对应属性,就可以实现对象创建
    (2)在 bean 标签有很多属性,介绍常用的属性
    * id 属性:唯一标识
    * class 属性:类全路径(包类路径)

    * name 属性: 和 id 一样,可以加特殊字符
    (3)创建对象时候,默认也是执行无参数构造方法完成对象创建


    2、基于 xml 方式注入属性(手动装配)

       (两种方式:使用 set 方法进行注入;使用有参数构造进行注入)
          DI:依赖注入,就是注入属性

    2.1、 第一种注入方式:使用 set 方法进行注入
    (1)创建类,定义属性和对应的 set 方法

    (2)在 spring 配置文件配置对象创建,配置属性注入

    * name:属性名

    * value:属性值

    * ref: bean引用,bean标签的id。可用于内部和外部bean注入,集合中设置对象元素

     

    内部bean注入:嵌套

    array注入:

    map注入:

    set注入:

    2.2、 第二种注入方式:使用有参数构造进行注入
    (1)创建类,定义属性,创建属性对应有参数构造方法

    (2)在 spring 配置文件中进行配置

    * constructor-arg:有参构造

    3、自动装配:一般使用注解方式,这里了解一下xml方式自动装配

    bean 标签属性 autowire,配置自动装配
    autowire 属性常用两个值:
    byName 根据属性名称注入 ,注入值 bean 的 id 值和类属性名称一样,同一个类型的bean对象可以有多个
    byType 根据属性类型注入,同一个类型的bean对象只能有一个

    3. IOC 操作 Bean 管理(基于注解)

    1、注解简介:可以作用于类,属性,方法上; 用于简化xml配置

    2、Spring创建对象注解

    (1) @Component
    (2) @Service
    (3) @Controller
    (4) @Repository

    3、基于注解方式实现对象创建过程

    3.1、引入aop依赖

    3.2、开启组件扫描

    1. <context:component-scan base-package="com.atguigu">context:component-scan>

    3.3、创建类,在类上面添加创建对象注解

    1. @Component(value = "userService") //
    2. public class UserService {
    3. public void add() {
    4. System.out.println("service add.......");
    5. }
    6. }

    4、基于注解方式实现属性注入

    对象类型:

    (1) @Autowired:根据属性类型进行自动装配
    (2) @Qualifier:根据名称进行注入  

    @Qualifier(value = "userDaoImpl1") //根据名称进行注入


    (3) @Resource:可以根据类型注入,可以根据名称注入

    1. @Resource //根据类型进行注入
    2. @Resource(name = "userDaoImpl1") //根据名称进行注入

    普通类型:
    (4) @Value:注入普通类型属性

    @Value(value = "abc")

    5、完全注解开发(Springboot)

    (1)创建配置类,替代 xml 配置文件

    1. @Configuration //作为配置类,替代 xml 配置文件
    2. @ComponentScan(basePackages = {"com.atguigu"})
    3. public class SpringConfig {
    4. }


    (2)编写测试类

    1. @Test
    2. public void testService2() {
    3. //加载配置类
    4. ApplicationContext context
    5. = new AnnotationConfigApplicationContext(SpringConfig.class);
    6. UserService userService = context.getBean("userService",
    7. UserService.class);
    8. System.out.println(userService);
    9. userService.add();
    10. }

  • 相关阅读:
    努力前行,平凡的我们也能画出一条星光闪耀的轨迹——人大女王金融硕士项目
    Ribbon源码解析
    html5 web 按钮跳转方法(及其相关)
    hive表向es集群同步数据20230830
    Web Woeker和Shared Worker的使用以及案例
    Linux之租云服务器及配docker环境
    解决el-form部分字段在输入的时候被带着走的问题
    读书笔记:多Transformer的双向编码器表示法(Bert)-3
    ML之PDP:基于titanic泰坦尼克是否获救二分类预测数据集利用PDP部分依赖图对RF随机森林和LightGBM模型实现可解释性案例
    电商api接口进行数据采集获取淘宝/天猫/京东/抖音多平台商品价格
  • 原文地址:https://blog.csdn.net/xd592319702/article/details/126120317