Spring框架——IoC详解

Spring

IoC

1.IoC概念 (”Inversion of Control“)
  • 实现方法:

    • 依赖注入 (”Dependency Injection“,简称 ”DI“)
    • 依赖查找 (”Dependency Lookup“)
  • 控制反转:

    • 把对象创建和对象之间的调用过程,交给Spring进行管理
    • 使用IoC的目的:为了降低耦合度
  • 配置

<bean id="user" class="com.java.spring5.User"></bean>
  • 调用
@Test
public void userText() {
    //加载Spring配置文件
    ApplicationContext/(BeanFactory)(两者都行) context = new ClassPathXmlApplicationContext("bean1.xml");
    //获取配置文件创建的对象
    User user = context.getBean("user", User.class);
    //调用对象方法
    System.out.println(user);
    user.方法();
}
  • 底层原理

    • 工厂模式 (在工厂类中进行如下操作)

      • xml解析 (获取对象路径)
      • 反射 (获取对象全类名)

      < return (通过反射对象的方法创建对象并返回) >

  • IoC接口

    • IoC思想基于IoC容器完成,IoC容器底层就是对象工厂

    • Spring提供了IoC实现的两种方式:(两个接口)

      • BeanFactorySpring内部接口,不提供给开发人员使用

        < 懒加载(加载配置文件时不创建对象,调用时才创建)>

      • ApplicationContextBeanFactory的子接口,提供更多更强大的功能,一般由开发人员使用

        < 饿加载(空间换时间)>

    • ApplicationContext接口实现类

      • FileSystemXmlApplicationContext:绝对路径
      • ClassPathXmlApplicationContext:相对路径
  • IoC操作Bean管理

    • Bean管理

      • Spring创建对象
      • Spring注入属性
    • Bean管理操作的两种方式

      • 基于xml配置文件
      1. 基于xml创建对象

        <bean id="user" class="com.java.spring5.User"></bean>
        

        (1)id属性:标识(别名)

        (2)class属性:类全路径(包类路径)

        (3)默认无参构造

      2. 基于xml注入属性

        DI(依赖注入):

        < set注入 & 构造注入 >

        (1)set注入

        <property name="name" value="Admin"></property>
        

        (2)构造注入

        <constructor-arg name="name" value="Admin"></constructor-arg>
        
      • 基于注解
  • Bean & FactotyBean

    • 普通Bean:配置文件中定义的Bean类型即返回类型
    • 工厂Bean:配置文件中定义的Bean类型可以和返回类型不一样
      • Spring内置Bean
      • 实现接口FactotyBean
  • Bean

    • Bean的作用域:在Spring中设置创建的Bean是单实例(默认)还是多实例

      <bean id="user" class="com.java.spring5.User" scope="prototype/singleton(default)"></bean>
      
    • Bean的生命周期:

      (1)通过构造器创建Bean实例(无参构造)

      (2)为Bean的属性设置值和对其他Bean的引用(调用set方法)

      (3)调用Bean的初始化方法(需配置)

      (4)Bean可以使用了(对象获取到了)

      (5)当容器关闭时,调用Bean的销毁方法(需配置),进行后置处理(调用后置处理器,实现 BeanPostProcessor 接口)

  • xml自动装配

    • 根据指定装配规则(属性名称或类型),Spring自动将匹配的属性值进行注入

      <bean id="user" class="com.java.spring5.User" autowire="byName/byType"></bean>
      
      • byName:id必须和要注入的属性名一致
      • byType:id必须和要注入的属性类型一致
  • 外部属性文件

    • 创建properties文件
    • 用xmln创建命名空间
    • context标签引用properties文件全类名
    • 作用:在多属性配置中节省大量property标签
2.IoC操作Bean管理(注解版)
  • 创建对象

    • Spring基于Bean管理中创建对象提供了注解

      • @Component(组件,用于创建对象)

      • @Service(service层)

      • @Controller(web层)

      • @Repository(dao层)

        < 以上四个注解功能一样,都可以用来创建Bean实例 >

    • 步骤:

      1. 引入AOP的依赖(Maven引入Spring依赖是会间接引入必要的AOP依赖)

      2. 开启组件扫描(先添加命名空间)

        <context:component-scan base-package="com.java.spring5"></context:component-scan>
        

        < 扫描多个包用逗号隔开,或扫描包的上层目录 >

      3. 创建类,添加注解

        < 注解中value不写默认类名首字母小写 >

  • 组件扫描(通过自己配置实现灵活扫描)(略)

  • 注入属性

    • Spring基于Bean管理中注入属性提供了注解

      • @AutoWired(根据属性类型进行自动装配)
      • @Qualifier(根据属性名称进行注入)
      • @Resource(可以根据类型也可以根据名称)
      • @Value(注入基本类型属性)
    • 步骤:

      1. 创建service和dao类,添加创建对象注解

      2. 在service中添加注解自动注入dao对象

        < @Qualifier要和@AutoWired一起用 >

  • 纯注解开发

    • @Configuration:将当前类作为配置类(Config类),替代xml配置文件

    • @ComponentScan:组件扫描(basePackages = {“包类路径”})

    • 加载配置类

      ApplicationContext context = new AnnotationConfigApplicationContext(xxxConfig.class);
      
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matcha Latte

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值