• Spring IOC


    IOC:Inversion of Control 控制反转. 指的是 对象的创建权反转(交给)给Spring.

    作用是实现了程序的解耦合.

    1.IOC和DI:

    IOC :控制反转,将对象的创建权交给了Spring.

    DI   :Dependency Injection 依赖注入.需要有IOC的环境,Spring创建这个类的过程中,Spring将类的依赖的属性设置进去.

      例如:如果UserServiceImpl的实现类中有一个属性,那么使用Spring框架的IOC功能时,可以通过依赖注入把该属性的值传入进来!!

      具体的配置如下

        <bean id="us" class="com.itheima.demo1.UserServiceImpl">
          <property name="uname" value="小风"/>
        </bean>

    2.Spring框架的属性注入

      1. 对于类成员变量,常用的注入方式有两种
        构造函数注入
        属性setter方法注入

    3. BeanFactory和ApplicationContext的区别:

      BeanFactory     :是在getBean的时候才会生成类的实例.

      ApplicationContext  :在加载applicationContext.xml时候就会创建.

    4.Spring中<bean>标签的配置

      1. id属性和name属性的区别
         id -- Bean起个名字,在约束中采用ID的约束,唯一
          取值要求:必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号 id:不能出现特殊字符

        name -- Bean起个名字,没有采用ID的约束(了解)
           取值要求:name:出现特殊字符.如果<bean>没有id的话 , name可以当做id使用
      2. class属性 -- Bean对象的全路径
      3. scope属性 -- scope属性代表Bean的作用范围
         singleton -- 单例(默认值)
        prototype -- 多例,在Spring框架整合Struts2框架的时候,Action类也需要交给Spring做管理,配置把Action类配置成多例!!
        request -- 应用在Web项目中,每次HTTP请求都会创建一个新的Bean
        session -- 应用在Web项目中,同一个HTTP Session 共享一个Bean
        globalsession -- 应用在Web项目中,多服务器间的session
      4. Bean对象的创建和销毁的两个属性配置
        说明:Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法
         init-method -- 当bean被载入到容器的时候调用init-method属性指定的方法
         destroy-method -- 当bean从容器中删除的时候调用destroy-method属性指定的方法

    5.Spring 的相关配置文件只加载一次 其中Bean对象默认单例原因?

      思考:启动web服务器时,创建ServletContext对象(这个对象服务器启动只创建一次,服务器宕机才被销毁),Spring的监听器ContextLoaderListener监听ServletContext对象的创建,执行方法加载applicationContext.xml配置文件,加载一次,对象已经被创建好了。(需要使用Web工厂的方式WebApplicationContext)

    <!-- 配置WEB整合的监听器 -->
    
    <listener>
    
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    
    </listener>
    
    <!-- 加载方式:默认只能加载WEB-INF目录下的配置文件,提供配置方式,加载src目录下 src目录编译后到WEB-INF/classes目录下-->
    
    <context-param>
    
    <param-name>contextConfigLocation</param-name>
    
    <param-value>classpath:applicationContext.xml</param-value>
    
    </context-param>
    

    6.Spring框架的IOC之注解方式

      1.在applicationContext.xml配置文件中开启组件扫描
        Spring的注解开发:组件扫描
        <context:component-scan base-package="com.fff"/>

      2.在l例如UserServiceImpl的实现类上添加注解
        @Component(value="userService") -- 相当于在XML的配置方式中 <bean id="userService" class="...">

      3.Spring框架中Bean管理的常用注解

        1. @Component:组件.(作用在类上)

        2. Spring中提供@Component的三个衍生注解:(功能是一致的)
          @Controller -- 作用在WEB层
          @Service -- 作用在业务层
          @Repository -- 作用在持久层

          说明:这三个注解是为了让标注类本身的用途清晰
        3. 属性注入的注解(说明:使用注解注入的方式,可以不用提供set方法)
          如果是注入的普通类型,可以使用value注解
            @Value -- 用于注入普通类型

          如果注入的是对象类型,使用如下注解
            @Autowired -- 默认按类型进行自动装配
          如果想按名称注入
            @Qualifier -- 强制使用名称注入

          @Resource -- 相当于@Autowired和@Qualifier一起使用
            强调:Java提供的注解
            属性使用name属性

    7.Bean的生命周期:

      答:跟对象的生命周期实质上是一致的,大概分为三个阶段:

        1.实例化(为bean对象开辟空间)

        2.初始化(对对象的属性进行依赖注入,使用setter方法)

        3.销毁

      具体来讲的话分为这些:

        1. 实例化一个Bean,也就是我们通常说的new,默认为单例

        2. 按照Spring上下文对实例化的Bean进行配置,也就是IOC注入

        3. 如果这个Bean实现了BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,此处传递的是Spring配置文件中Bean的ID

        4. 如果这个Bean实现了BeanFactoryAware接口,会调用它实现的setBeanFactory(),传递的是Spring工厂本身(可以用这个方法获取到其他Bean)

        5. 如果这个Bean实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文,该方式同样可以实现步骤4,但比4更好,以为ApplicationContext是BeanFactory的子接口,有更多的实现方法

        6. 如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用After方法,也可用于内存或缓存技术

        7. 如果这个Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法

        8. 如果这个Bean关联了BeanPostProcessor接口,将会调用postAfterInitialization(Object obj, String s)方法

          注意:以上工作完成以后就可以用这个Bean了,那这个Bean是一个single的,所以一般情况下我们调用同一个ID的Bean会是在内容地址相同的实例

        9. 当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean接口,会调用其实现的destroy方法

        10. 最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法

    8.IoC的好处

    1. 对象创建统一管理
    2. 规范的对象生命周期管理
    3. 获取一致的对象(单例模式)

    灵活的依赖注入

  • 相关阅读:
    链接工作过程
    编译器工作过程
    图像边缘提取
    剑指32-1 从上到下打印二叉树
    剑指31 栈的压入 弹出序列
    剑指30 包含min函数的栈
    剑指28 对称的二叉树(暂留)
    asp.net core获取当前请求的完整url
    安装启动consul代理,consul后台管理
    asp.net core用命令方式启动项目
  • 原文地址:https://www.cnblogs.com/fengcha0/p/10083582.html
Copyright © 2020-2023  润新知