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>

  • 相关阅读:
    mysql索引
    springboot mybatis 后台框架平台 shiro 权限 集成代码生成器
    java 企业网站源码模版 有前后台 springmvc SSM 生成静态化
    java springMVC SSM 操作日志 4级别联动 文件管理 头像编辑 shiro redis
    activiti工作流的web流程设计器整合视频教程 SSM和独立部署
    .Net Core中的ObjectPool
    文件操作、流相关类梳理
    .Net Core中的配置文件源码解析
    .Net Core中依赖注入服务使用总结
    消息中间件RabbitMQ(一)
  • 原文地址:https://www.cnblogs.com/lee18/p/11343297.html
Copyright © 2011-2022 走看看