spring框架简单入门

初识spring

spring框架的两大优势:

        1.==简化开发== 简化了企业级开发的复杂性

        2.==框架继承==高效整合了其他主流框架,提升运行与开发效率

核心思想:

        1.IOC(控制反转)

        2.AOC(面向切面编程)

spring发展史:

 2004年Rod Johnson创建了更为高效的spring框架,

spring1.0: 是去全配置形式进行编程

spring2.0: 添加了注解功能,提高了开发效率

spring3.0: 完全变成了纯注解开发

spring4.0: 根据jdk的更新, 对个别jdk进行了调整

spring5.0: 全面支持jdk8, 这个时候如果要用spring框架就要使用jdk8至以上的版本

spring框架的架构图:

IOC与DI核心思想:

IOC(Inversion of Control  控制反转)

        new对象这样层级之间的耦合性就会很高,IOC是将创建对象的权利移交给了外部,也就是spring,spring框架在外部创建了一个IOC容器,将创建的对象称之为Bean存储在容器中.当我们需要用到对象的时候,容器给我们提供了一个方法,我们就可以获取到对象,也解除了耦合性

DI(Dependency Injection  依赖注入)

        往往一个对象的执行需要依赖于其他对象的支撑,这个时候spring框架会将IOC容器中存储的有依赖关系的bean进行依赖绑定.

IOC和DI的实现,为了实现充分的解耦,这样我们不仅可以直接从容器中拿到bean,而且bean也获取到了所有的依赖关系

使用配置文件简单实现IOC控制反转

<?xml version="1.0" encoding="UTF-8"?>
<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配置文件中配置管理bean-->

    <!--配置数据实现层bean-->
    <!-- id属性: 代表指定的bean名称,在从容器中获取bean的时候,用此名称可以获取到此bean-->
    <!-- class属性: 指定bean的类型,这里用全类名指定到数据实现层的实现类BookDaoImpl,代表创建的bean是BookDaoImpl类型-->
    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">

    </bean>


    <!--配置业务实现层bean-->
    <!-- id属性: 代表指定的bean名称,在从容器中获取bean的时候,用此名称可以获取到此bean-->
    <!-- class属性: 指定bean的类型,这里用全类名指定到数据实现层的实现类BookServiceImpl,代表创建的bean是BookServiceImpl类型-->
    <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">

        <!--而业务实现层对象是依赖于数据实现层对象运行的,所以service层依赖dao层,使用DI进行依赖注入-->

        <!--name属性:代表配置的哪一个具体的属性-->
        <!--ref属性: 代表依赖的哪一个bean,这里依赖的是dao层的bean-->
        <property name="bookDao" ref="bookDao"/>

    </bean>


</beans>

实例化bean的三种实现方式:

构造方法:

<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">

静态/非静态工厂方法: (有些老一点的程序为了解耦创建了对象工厂)

 实例化工厂的升级方法:

 

bean的生命周期

1.使用属性:

init-method="初始化方法" destroy-method="销毁前执行的方法"

2.使用接口

InitializingBean, DisposableBean

实现这两个类,重写方法

 bean的销毁时机:

 在容器销毁的时候才会执行bean的销毁方法,

1.手动关闭容器:

ConfigurableApplicationContext接口的close()方法

2.注册关闭钩子(在虚拟机关闭前,先关闭容器再关闭虚拟机)

ConfigurableApplicationContext接口的registerShutdownHook()方法

DI的简单实现

setter注入:

        使用<property>标签 

        <property name="bookDao" ref="bookDao"/>

        name属性是指set方法,ref属性是对应容器中的bean对象

构造器注入:

        使constructor-arg>标签

        <constructor-arg name="bookDao" ref="bookDao"/>

        name属性是指构造方法中的参数名,ref属性是对应容器中的bean对象

注入基本数据类型:

        <var>标签换为<value>

自动装配:

概念:

        IOC容器根据bean需要的依赖,自动在容器中找到对应的bean进行装配注入

使用autowire属性关键字:

        autowire="byType" 根据类型进行自动装配(需保证bean的唯一性,推荐使用)

        autowire="byName" 根据bean名称进行装配(不推荐使用)

集合注入:

  <!--注入数组数据-->
        <property name="array">
            <array>
                <value>100</value>
                <value>200</value>
            </array>
        </property>
        <!--注入list集合数据-->
        <property name="list">
            <list>
                <value>aa</value>
                <value>bb</value>
            </list>
        </property>
        <!--注入set集合数据(会自动删选重复数据)-->
        <property name="set">
            <set>
                <value>aa</value>
                <value>aa</value><!--会被筛选掉-->
            </set>
        </property>
        <!--注入map集合数据-->
        <property name="map">
            <map>
                <entry key="键1" value="值1"/>
                <entry key="键2" value="值2"/>
            </map>
        </property>
        <property name="properties">
            <props>
                <prop key="country">china</prop>
                <prop key="province">henan</prop>
                <prop key="city">kaifeng</prop>
            </props>
        </property>

property标签表示setter方式注入,构造方式注入constructor-arg标签内部也可以写<array>、<list>、<set>、<map>、<props>标签

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值