zoukankan      html  css  js  c++  java
  • Spring

    spring 概述

    Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control: 反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,

    IOC 控制反转

    IOC 中 bean 标签和管理对象细节 

    <!--把对象的创建交给spring来管理-->
    <!--spring对bean的管理细节
    1.创建bean的三种方式
    2.bean对象的作用范围
    3.bean对象的生命周期
    -->

    <!--创建Bean的三种方式 -->
    <!-- 第一种方式:使用默认构造函数创建。
    在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时。
    采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数,则对象无法创建。

    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"></bean>
    -->

    <!-- 第二种方式: 使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器)
    <bean id="instanceFactory" class="com.itheima.factory.InstanceFactory"></bean>
    <bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"></bean>
    -->

    <!-- 第三种方式:使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入spring容器)
    <bean id="accountService" class="com.itheima.factory.StaticFactory" factory-method="getAccountService"></bean>
    -->

    <!-- bean的作用范围调整
    bean标签的scope属性:
    作用:用于指定bean的作用范围
    取值: 常用的就是单例的和多例的
    singleton:单例的(默认值)
    prototype:多例的
    request:作用于web应用的请求范围
    session:作用于web应用的会话范围
    global-session:作用于集群环境的会话范围(全局会话范围),当不是集群环境时,它就是session

    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl" scope="prototype"></bean>
    -->

    <!-- bean对象的生命周期
    单例对象
    出生:当容器创建时对象出生
    活着:只要容器还在,对象一直活着
    死亡:容器销毁,对象消亡
    总结:单例对象的生命周期和容器相同
    多例对象
    出生:当我们使用对象时spring框架为我们创建
    活着:对象只要是在使用过程中就一直活着。
    死亡:当对象长时间不用,且没有别的对象引用时,由Java的垃圾回收器回收
    -->

    依赖注入的概念 

    依赖注入:Dependency Injection。它是 spring 框架核心 ioc 的具体实现。 我们的程序在编写时,通过控制反转,把对象的创建交给了 spring,但是代码中不可能出现没有依赖的情况。 ioc 解耦只是降低他们的依赖关系,但不会消除。例如:我们的业务层仍会调用持久层的方法。 那这种业务层和持久层的依赖关系,在使用 spring 之后,就让 spring 来维护了。 简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。 

    构造函数注入 

    <!-- 使用构造函数的方式,给 service 中的属性传值 

    要求:

       类中需要提供一个对应参数列表的构造函数。 

    涉及的标签:

       constructor-arg   

    属性:   

     index:指定参数在构造函数参数列表的索引位置   

     type:指定参数在构造函数中的数据类型 

    name:指定参数在构造函数中的名称 用这个找给谁赋值
    =======上面三个都是找给谁赋值,下面两个指的是赋什么值的==============
    value:它能赋的值是基本数据类型和 String 类型

    ref:它能赋的值是其他 bean 类型,

    也就是说,必须得是在配置文件中配置过的 bean -->

    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
    <constructor-arg name="name" value=" 张三 ">

    </constructor-arg> <constructor-arg name="age" value="18"></constructor-arg>
    <constructor-arg name="birthday" ref="now"></constructor-arg> </bean>

    <bean id="now" class="java.util.Date"></bean>

     set 方法注入 

    <!-- 通过配置文件给 bean 中的属性传值:

    使用 set 方法的方式 涉及的标签:

    property 


    属性:

    name:找的是类中 set 方法后面的部分

    ref:给属性赋值是其他 bean 类型的

    value:给属性赋值是基本数据类型和 string 类型的 实际开发中,此种方式用的较多。 -->

    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">

    <property name="name" value="test"></property>
    <property name="age" value="21"></property>

    <property name="birthday" ref="now"></property>

    </bean> <bean id="now" class="java.util.Date"></bean>


    set 集合注入

    <!-- 注入集合数据 List 结构的: array,list,set
    Map 结构的 map,entry,props,prop
    -->
    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
    <!-- 在注入集合数据时,只要结构相同,标签可以互换 --> <!-- 给数组注入数据 --> <property name="myStrs">
    <set>

    <value>AAA</value>

    <value>BBB</value>

    <value>CCC</value>

    </set>
    </property>
    <!-- 注入 list 集合数据 -->

    <property name="myList">

    <array>

    <value>AAA</value>

    <value>BBB</value>

    <value>CCC</value>

    </array>

    </property>
    <!-- 注入 set 集合数据 -->

    <property name="mySet">
    <list>

    <value>AAA</value>

    <value>BBB</value>

    <value>CCC</value>

    </list> </property>
    <!-- 注入 Map 数据 -->

    <property name="myMap">

    <props>
    <prop key="testA">aaa</prop>

    <prop key="testB">bbb</prop>

    </props>
    </property>

  • 相关阅读:
    迟到的恶劣影响
    spring boot 向数据库写入海量数据
    分析 SQL 执行过程
    Mysql 索引 BTree 与 Hash
    Mysql 数据库设计
    Jdk 源码下载方式
    深入理解JVM虚拟机-周志明【第三版】
    Elasticsearch 查询实践
    MFC程序运行流程

  • 原文地址:https://www.cnblogs.com/lee18/p/11343297.html
Copyright © 2011-2022 走看看