返回顶部

Spring5 之 IOC

Spring 框架概述

  • Spring是轻量级的开源的JavaEE框架
  • 可以解决企业应用开发的复杂性
  • 有两个核心部分:IOC 和 Aop
    • IOC:控制反转,把创建对象的过程交给Spring管理
    • Aop:面向切面,不修改源码增加功能
  • Spring特点:
    • 方便解耦,简化开发
    • Aop编程支持
    • 方便测试
    • 方便和其他框架整合
    • 方便事务操作
    • 降低API开发难度

入门案例

  • IDEA 创建 Java 工程,导入基础jar包
  • 创建普通类,创建spring配置文件,配置创建的类
public class User {
    public void add(){
        System.out.println("hello Spring5");
    }
}


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="user" class="cn.demo.spring5.domain.User"></bean>
</beans>
  • 获取 User 对象

IOC容器

  • 控制反转,把对象创建和对象之间的调用过程交给Spring管理,目的是为了降低耦合

  • 底层原理:xml 解析、工厂模式、反射

    • 工厂模式

  • IOC容器实现的两种方式:(两个接口)

    • BeanFactory:基本实现方式,不推荐使用。加载配置文件时不会创建配置文件中的类的对象
    • ApplicationContext:BeanFactory的子接口,加载配置文件时会创建配置文件中的类的对象。此接口的实现类如下:
  • Bean 管理:Spring创建对象、注入属性

    • 实现方式 ①:xml

      • 创建对象、set 注入属性
      private String name;
      private Integer age;
      
      public void setName(String name) {
          this.name = name;
      }
      
      public void setAge(Integer age) {
          this.age = age;
      }
      
      <!--配置创建对象-->
      <bean id="user" class="cn.demo.spring5.domain.User">
          <!--set 注入属性-->
          <property name="name" value="啊狗"></property>
          <property name="age" value="20"></property>
      </bean>
      
      • 创建对象、有参构造方法注入属性
      public User(String name, Integer age) {
              this.name = name;
              this.age = age;
          }
      
      <!--    有参构造注入属性-->
          <bean id="user" class="cn.demo.spring5.domain.User">
              <constructor-arg name="name" value="曹操"></constructor-arg>
              <constructor-arg name="age" value="8000"></constructor-arg>
          </bean>
      

      *其他创建对象

    • 实现方式 ②:注解,创建对象的注解:@Component、@Service、@Controller、@Repository。

      • 导入jar包
      • 开启注解扫描

      • 创建类,在类上加入注解
      • 获取对象
      • 细节:设置只扫描某个注解或者不扫描注解

      • 注解注入属性:@Autowired(类型注入)、@Qualifier(名称注入)、@Resource、@Value(常见类型注入)
      • 完全注解开发:创建类,加注解@Configuration 作为配置类,@ComponentScan 组件扫描,@Import 导入其他配置类,@Bean 将方法返回值作为对象放进IOC容器,@PropertySource 指定properties文件位置。
  • 外部 Bean 注入:一个类在另外一个类中使用,作为属性,设置 set 方法,xml 标签中使用 ref 属性引用。

  • Bean 管理:注入引用数据类型,数组、list 集合、Map、Set


  • 工厂Bean(FactoryBean):配置文件中类型和实际返回类型可以不同。创建类实现 FactoryBean 接口,实现接口方法,在 getObject 方法中定义返回类型。

  • Bean作用域:Spring创建对象默认是单例的

    • 设置为多例
    • singleton 和 prototype 区别
  • Bean 生命周期

  • Spring 配置文件引入外部文件(数据库连接参数的 properties 文件)

    • properties 文件
    • context 命名空间
    • 引入外部文件,配置连接池
posted @ 2021-09-24 21:13  凑数的园丁  阅读(49)  评论(0)    收藏  举报