• Spring的IOC


    一、Spring的概述

           1.Spring是什么?

              Spring是分层的 Java SE/EE应用全栈轻量级开源框架;

           2.Spring的两大核心

                1) IOC(Inverse Of Control: 反转控制

                 2)  AOP(Aspect Oriented Programming:面向切面编程

           3.Spring优势

               1)方便解耦,简化开发 

                       通过 Spring提供的 IoC容器,可以将对象间的依赖关系交由 Spring进行控制;

                2) AOP编程的支持 

                       通过 Spring的 AOP 功能,方便进行面向切面的编程

                3)声明式事务的支持 

                4)方便程序的测试 

            4.Spring的体系结构(官方)

                 

               5.程序耦合

          耦合: 程序之间的依赖       
    包括:
    类之间的依赖
    方法之间的依赖
    解耦
    降低程序间的依赖关系
    实际开中应该做到:编译期不依赖,运行时才依赖
          解耦思路
    第一步:使用反射来创建对象,避免使用new关键字
    第二步:通过读取配置文件来获取要创建的对象的全限定类名

     二、SpringIOC

            1.概念:

                控制反转(IOC):把创建对象的权力交给框架,是框架的重要特性,并非面向对象编程的专业术语,包括:依赖注入(DI)依赖查找;

             2.IOC作用:削减计算机程序之间的耦合(解除我们代码中的依赖关系)

             3.环境搭建

               1)导入spring的依赖

                2)创建配置文件:

                            导入约束:

    <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">

                            把对象的创建交给spring管理:

    <!--把对象的创建交给spring管理-->
        <bean id="accountService" class="com.li.Service.impl.AccountServiceImpl"/>

                3)获取springIOC的核心容器,根据id获取对象:                 

     public static void main(String[] args) {
          ApplicationContext ac =new ClassPathXmlApplicationContext("Bean.xml");
            IAccountService accountService = ac.getBean("accountService", IAccountService.class);
        }

                       ApplicationContext三个常用的类:

                                        ClassPathXmlApplicationContext:他可以加载类路径下的配置文件,要求配置文件必须在类路劲下,不在则不能加载

                                        FileSystemXmlApplicationContext:它可以加载磁盘任意路劲的配置文件(必须有访问权限)

                                        AnnotationConfigApplicationContext:读取注解创建容器               

                      核心容器的两个接口引发的问题:

                              ApplicationContext: 单例对象适用(实际开发中用)

                                               它在构建核心容器时,创建对象采取的策略是采用立即加载方式,使用读取完配置文件就马上创建配置文件中的配置对象

                              BeanFactory:多例对象

                                              它在构建核心容器时,创建对象采取的策略是采用延迟加载方式,什么时候根据id获取对象了,什么时候才真正的创建对象

             4.Spring 创建Bean的三种方式

                 1)使用默认的构造函数创建

                        在spring的配置文件中使用Bean标签,配以id和class属性即可;

                        注意: 如果该类中无默认的构造函数则创建失败;              

    <!--使用默认的构造函数创建-->
    <bean id="accountService" class="com.li.service.impl.AccountServiceImpl"></bean>

                  2)  使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器)

                 

    /**
     * 模拟一个工厂类
     */
    public class InstanceFactory {
        public IAccountService getAccountService(){
            return new AccountServiceImpl();
        }
    }
    <!--xml文件的配置-->
    <
    Bean id="intanceFactory" class="com.li.factory.InstanceFactory"/> <bean id="accountService" factory-bean="intanceFactory" factory-method="getAccountService"/>
    
    
    
     

                3)使用工厂中静态方法创建对象(使用某个类中的静态方法创建随想,并存入spring)

    /**
     *模拟一个工厂类
     */
    public class StaticFactory {
        public static IAccountService getAccountService(){
            return new AccountServiceImpl();
        }
    }
    <Bean id="accountService" factory-bean="com.li.factory.Staticfactory" factory-method="getAccountService"/>

            5.Spring中Bean的作用范围

                  1.spring中bean标签的调整:

                        * 使用bean标签中的scope属性:

                               取值:

                                       1)singleton:单例(默认值)

                                       2)prototype:多例

                                       3)request:作用于web的请求范围

                                       4)session:作用于web的会话范围             

                                       5)globla-session:作用于集群的会话范围(全局会话范围),当不是集群环境时,它就是session

              6.Bean对象的生命周期

                     1)单例对象:

                                         出生:容器创建时(解析配置文件)对象产生

                                         活着:只要容器在,对象就在

                                         死亡:容器不在,对象就不在

                                         单例对象的生命周期和容器相同

                      2)多例对象:

                                       出生:当使用对象时spring框架为我们创建

                                       活着:对象在使用过程中就一着在

                                        死亡:当对象长时间不用,且没有其他对象引用,java垃圾回收机器进行回收

  • 相关阅读:
    codeforces628D. Magic Numbers (数位dp)
    hdu5432Rikka with Array (数位dp+十进制转化为二进制)
    LA3902 Network (树上dfs)
    zoj3494 BCD Code(AC自动机+数位dp)
    codeforces #345 (Div. 1) D. Zip-line (线段树+最长上升子序列)
    zjnu1786 PROSJEK(二分)
    九度1497:面积最大的全1子矩阵 (单调队列,单调栈)
    zjnu1726 STOGOVI (lca)
    zjnu1735BOB (单调队列,单调栈)
    uva10859 Placing Lampposts (树形dp+求两者最小值方法)
  • 原文地址:https://www.cnblogs.com/cqyp/p/12497509.html
Copyright © 2020-2023  润新知