美文网首页
Java实训(2)-- Spring 核心 之 IOC - 20

Java实训(2)-- Spring 核心 之 IOC - 20

作者: 空心老竹 | 来源:发表于2018-06-08 18:42 被阅读0次

    Spring

    1.将类交给spring进行管理

    2.构造spring工厂对象(BeanFactory,ApplicationContext)

    3.通过spring工厂得到实例化对象


    Spring IOC的几种注入方式

    1. 构造器注入

    2. 属性注入

    3. 接口注入

    1. 通过构造器注入值

    调用构造方法进行注入,类的构造方法必须存在

    注入的参数类型与属性一致

    可以指定参数或者不指定参数

    指定参数可以乱序(通过 name 或 index 来指定参数)

    不指定参数必须按照构造方法的参数顺序

    <bean id="Book" class="com.neuedu.springcore.Book">
          <!-- 构造参数 -->
          <!-- name存在时无序,name不存在时参数必须有序 -->
          <constructor-arg name="isbn" value="ISBN-11111111-111"></constructor-arg>
          <constructor-arg name="bookName" value="构造参数- springCore"></constructor-arg>
          <constructor-arg name="publishDate" ref="nowTime"></constructor-arg>
          <constructor-arg name="price" value="1234"></constructor-arg>
    </bean>
    

    2. 通过属性注入值

    注入时会使用反射机制查找 set 方法

    注入的参数类型

    基本数据类型(数值类型,字符类型 等)

    对象类型

    集合类型 ( set,list,map,数组 等)

    <bean id="nowTime" class="java.util.Date"></bean>
    <bean id="Book" class="com.neuedu.springcore.Book">
          <!-- 属性设置 -->
          <property name="bookName"  value="springCore"></property>
          
          <!-- ref 引用其他bean, ref 的值设置为 其他 bean 的 ID-->
          <property name="publishDate" ref="nowTime"></property>
          <property name="isbn" value="ISBN-1234556-2134"></property>
          
          <!-- 值可以用 value 标签 放在 property 标签内 -->
          <property name="price" >
                <value>1234</value>
          </property>
          
          <!-- 设置 List 参数  -->
          <property name="tags">
               <list>
                   <value>spring</value>
                   <value>计算机</value>
                   <value>软件</value>
               </list>
          </property>
    </bean>
    

    Spring 的两种工作环境

    1. ApplicationContext

    2. BeanFactory

    1. ApplicationContext

    1. ApplicationContext读取xml配置的两种方式
    1. ApplicationContext  context = new ClassPathXmlApplicationContext(“applicationContext.xml”);
    
    2. ApplicationContext context = new FileSystemXmlApplicationContext("src\\applicationContext.xml");
    

    使用ApplicationContext加载配置文件时,spring会按照先后顺序实例化对象,

    如果对象间使用构造器进行引用或关联,则会修改实例化的先后顺序,把依赖关系的类先进行实例化

    <bean id="Book" class="com.neuedu.springcore.Book">
    <constructor-arg ref="Category"></constructor-arg>
    </bean>
    <bean id="Category" class="com.neuedu.springcore.Category"></bean>
    <!-- Book对象引用了Category对象,所以先实例化Category对象,即使Category 在 Book后面 -->
    
    1. Java 代码获取对象实例:
    //通过bean id获取对象实例(强制转换类型)
    Book book = (Book) context.getBean("Book");
    
    //通过泛型获取对象实例
    Book book = context.getBean(Book.class);
    

    2. BeanFactory (现在基本不用此方式)

    ClassPathResource resource = new ClassPathResource("config/lifeConfig.xml");
    BeanFactory factory = new XmlBeanFactory(resource);
    Book book = factory.getBean(Book.class);
    

    Bean 的作用域

    在spring使用scope配置对象的作用范围(与生命周期类似

    1. prototype - 原型模式,每调用一次getBean都会产生一个新的对象

    2. singleton - 单例模式,在同一个spring上下文环境中只有一个实例对象

    -- 在web环境中,还有request,session,application :

    1. request - 请求模式,在同一次http请求中只有一个对象实例

    2. session - 回话模式,在同一个HttpSession会话中只有一个对象实例

    3. application - 应用模式,在同一个应用程序中只有一个对象实例

    相关文章

      网友评论

          本文标题:Java实训(2)-- Spring 核心 之 IOC - 20

          本文链接:https://www.haomeiwen.com/subject/tlaasftx.html