10-20 Spring框架(二)—— IoC核心

一、概念

  IOC(控制反转)就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部的容器负责,这样控制权就由应用转移到外部容器,控制权的转移就是所谓的反转。

  控制权转移带来的好处就是降低了业务对象之间的依赖程度(低耦合,高内聚)

二、DI(依赖注入)

  DI(Dependency Injection,依赖注入)可以向某个对象动态的注入它所依赖的其他对象

  依赖注入的方式

    1.构造器注入

    2.方法注入

    3.接口注入
   注意:Spring的IOC容器仅支持构造器和方法注入

         

 

三、IOC容器

  Spring IOC容器是指实现IOC(控制反转)和DI(依赖注入)概念的一个Spring组件,开发者使用IOC容器可以获得IOC/DI带来的降低耦合度和简化开发的特性

  3.1 Bean

    Spring 中使用 Bean 来表示应用组件,一个 Bean 组件可以是任何形式的简单 Java 类实例,Spring 中使用 IoC 容器来管理 Bean 的生命周期(Bean 的创建和销毁)

            

  3.2 BeanFactory(Bean工厂)

    1.BeanFactory是Spring框架最核心的接口,它提供了高级的IOC的配置机制;BeanFactory使管理不同类型的java对象成为可能。

    2.BeanFactory是Spring框架 的基础设施,属于底层封装组件,专供Spring框架内部使用。

  3.3 ApplicationContext(应用上下文)

    ApplicationContext是建立zaiBeanfactory基础之上,提供了更多的面向应用的功能。一般称beanfactory为IOC容器,而称ApplicationContext为应用上下文

    ApplicationContext面向Spring框架的开发者,属于上乘封装组件,专供开发者使用

    通过ApplicationContext应用方法上下文实例调用其getBean()从IOC容器中即可获得Bean对象实例。

 

  3.4 Spring有三种启动IOC容器的方式

    1.classpathXMLApplicationContext(相对路径)

      ApplicationContext ctx = new ClassPathxmlApplicationComtext(“包路径/beans.xml”)

    2.fileSystemXMLApplicationContext(绝对路径)

      文件路径/beans.xml

    3.XMLwebApplicationContext(web配置路径)

四、装配bean

  装配 Bean 是指在 Spring IoC 容器中创建 Bean 组件和建立 Bean 组件之间的依赖关系的过程,即实现 IoC(控制反转)和 DI(依赖注入)。
  Spring 支持三种装配 Bean 的方式:

    基于 XML 配置装配 Bean

    基于注解装配 Bean

    基于 Java 类装配 Bean

  4.1开启注解

<!--Spring IoC 容器需要在 Spring 配置中开启注解(默认禁用注解)-->
<context:annotation-config />
<!--Spring IoC 容器需要自动检测 Bean(扫描 Java 类中 Bean 组件) -->
<context:component-scan packages=“包路径”/>

  4.2定义Bean组件注解(ioc)

    @Component

      标识java类为Spring Bean组件(通用注解)
    @Controller
      标识三层架构中表现层的java类Spring Bean组件
    @Service
      标识三层架构中业务逻辑层的java类Spring Bean组件
    @Repository
      标识三层架构中数据访问层或持久层的java类Spring Bean组件

  4.3 Bean组件依赖注入注解

    @Autowired

      可以用于标注setter方法
      可以用于标注构造器
      可以用于直接标注属性(常用)
    @Resource
      使用与@Autowired注解相同
    @Qualifier
      明确指定需要自动装配的Bean组件

 

posted @ 2020-10-21 19:28  随时随地的  阅读(80)  评论(0编辑  收藏  举报