spring快速入门(一) IoC

spring简介

spring优点:
方便解耦,简化开发
Spring 就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给 Spring 管理。

方便集成各种优秀框架
Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持。

降低 Java EE API 的使用难度
Spring 对 Java EE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等)都提供了封装,使这些 API 应用的难度大大降低。

方便程序的测试
Spring 支持 JUnit4,可以通过注解方便地测试 Spring 程序。

AOP 编程的支持
Spring 提供面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能。

声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无须手动编程。

spring架构图

  1. Data Access/Integration(数据访问/集成)
    数据访问/集成层包括 JDBC、ORM、OXM、JMS 和 Transactions 模块,具体介绍如下。
    JDBC 模块:提供了一个 JBDC 的样例模板,使用这些模板能消除传统冗长的 JDBC 编码还有必须的事务控制,而且能享受到 Spring 管理事务的好处。
    ORM 模块:提供与流行的“对象-关系”映射框架无缝集成的 API,包括 JPA、JDO、Hibernate 和 MyBatis 等。而且还可以使用 Spring 事务管理,无需额外控制事务。
    OXM 模块:提供了一个支持 Object /XML 映射的抽象层实现,如 JAXB、Castor、XMLBeans、JiBX 和 XStream。将 Java 对象映射成 XML 数据,或者将XML 数据映射成 Java 对象。
    JMS 模块:指 Java 消息服务,提供一套 “消息生产者、消息消费者”模板用于更加简单的使用 JMS,JMS 用于用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
    Transactions 事务模块:支持编程和声明式事务管理。

  2. Web 模块
    Spring 的 Web 层包括 Web、Servlet、WebSocket 和 Portlet 组件,具体介绍如下。
    Web 模块:提供了基本的 Web 开发集成特性,例如多文件上传功能、使用的 Servlet 监听器的 IOC 容器初始化以及 Web 应用上下文。
    Servlet 模块:提供了一个 Spring MVC Web 框架实现。Spring MVC 框架提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等及一套非常易用的 JSP 标签,完全无缝与 Spring 其他技术协作。
    WebSocket 模块:提供了简单的接口,用户只要实现响应的接口就可以快速的搭建 WebSocket Server,从而实现双向通讯。
    Portlet 模块:提供了在 Portlet 环境中使用 MVC 实现,类似 Web-Servlet 模块的功能。

  3. Core Container(Spring 的核心容器)
    Spring 的核心容器是其他模块建立的基础,由 Beans 模块、Core 核心模块、Context 上下文模块和 SpEL 表达式语言模块组成,没有这些核心容器,也不可能有 AOP、Web 等上层的功能。具体介绍如下。
    Beans 模块:提供了框架的基础部分,包括控制反转和依赖注入。
    Core 核心模块:封装了 Spring 框架的底层部分,包括资源访问、类型转换及一些常用工具类。
    Context 上下文模块:建立在 Core 和 Beans 模块的基础之上,集成 Beans 模块功能并添加资源绑定、数据验证、国际化、Java EE 支持、容器生命周期、事件传播等。ApplicationContext 接口是上下文模块的焦点。
    SpEL 模块:提供了强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从 Spring 容器获取 Bean,它也支持列表投影、选择和一般的列表聚合等。

  4. AOP、Aspects、Instrumentation 和 Messaging
    在 Core Container 之上是 AOP、Aspects 等模块,具体介绍如下:
    AOP 模块:提供了面向切面编程实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需要的代码中,这样各司其职,降低业务逻辑和通用功能的耦合。
    Aspects 模块:提供与 AspectJ 的集成,是一个功能强大且成熟的面向切面编程(AOP)框架。
    Instrumentation 模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。
    messaging 模块:Spring 4.0 以后新增了消息(Spring-messaging)模块,该模块提供了对消息传递体系结构和协议的支持。

  5. Test 模块
    Test 模块:Spring 支持 Junit 和 TestNG 测试框架,而且还额外提供了一些基于 Spring 的测试功能,比如在测试 Web 框架时,模拟 Http 请求的功能。

spring的工作方式

在这里插入图片描述

Ioc控制反转

IOC,inversion of control :控制反转,指导开发人员如何适用对象,管理对象,把对象的创建,属性赋值,对象的声明周期都交给代码之外的容器管理,

(1)IOC分为控制和反转,
控制:对象创建,属性赋值,对象声明周期管理
反转:把开发人员对象的权限移交给了代码之外的容器实现,由容器完成对象的管理。
正转:使用new的构造方法,由开发人员掌握对象的创建,属性赋值,对象从开始到销毁的全部过程,

通过容器,可以使用容器中的对象,(容器已经创建了对象,对象属性赋值了,对象也组装好了)

spring就是一个容器,可以管理对象,创建对象,给属性赋值,
(2)IoC的技术实现
DI(依赖注入):dependency injection ,程序只需要提供要使用的对象名称就可以了,对象如何创建,如何从容器中查找,获取都是由容器内部自己实现。

依赖名词:比如说class A类使用了class B类的属性或者方法,叫做class A依赖B;

(3)spring框架使用的是DI实现IoC
通过spring框架,只需要提供要使用的对象名词就可以了,从容器中获取名称对应的对象。
spring底层使用的反射机制,通过反射创建对象,和属性。

(4)spring的配置文件

<?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">
</beans>

spring标准配置文件:
(1).根标签是beans
(2)后面是约束文件
(3)beans里面是bean声明
(4)什么是bean:bean就是Java对象,spring容器管理的Java对象就叫bean

(5)spring创建对象的特点
(1)容器对象ApplicationContext对象,获取要使用的Java对象,执行getbean(“的id”);
(2)spring默认的是调用类的无参构造方法,创建对象,
(3)spring读取配置文件时,会一次创建后所有声明的Java对象,都放到map中

(6)DI:给属性赋值
spring调用类的无参构造方法,创建对象,对象创建后,给属性赋值,
给属性赋值有
(1)xml配置文件中的标签和属性;
(2)使用注解
DI分类:set注入,也叫设值注入,构造注入
基于xml的DI
在xml配置文件中使用标签属性,完成对象创建,属性赋值
(1)set注入
概念:spring调用类中的set方法,在set方法中完成属性赋值,推荐使用。

<bean id="School" class="com.packe02.School">
    <property name="name" value="北京大学"/>
    <property name="address" value="北京"/>
</bean>
<!--简单类型的set注入,设置注入-->
<bean id="Student" class="com.packe02.Student">
     <property name="name" value="张三"/>
     <property name="age" value="15"/>
     <!--引用类型的注入方式-->
      <property name="school" ref="School"/>

(2)构造注入
构造注入:spring调用有参构造方法,在创建对象的同时给属性赋值

<bean id="Student" class="com.packe03.Student">
    <constructor-arg name="name" value="李四" />
    <constructor-arg name="age" value="15"/>
    <constructor-arg name="school" ref="School"/>
 </bean>

<!-- 构造注入,使用index,参数位置,构造方法从左到右-->
<bean id="mystudent" class="com.packe03.Student">
    <constructor-arg index="0" value="小黑"/>
    <constructor-arg index="1" value="25"/>
    <constructor-arg index="2" ref="School"/>
</bean>

(3)引用类型的自动注入
概念:spring可以根据某些规则给引用类型完成赋值,只对引用类型有效,规则byname,bytype,
1.byname:Java类中引用类型属性名称和spring容器中的bean的id名称是一样的,且数据类型也是一样的,这些bean能够赋值给引用类型
2.bytype:Java类中应用类型的数据类型和spring容器中的bean的class值是同源关系,这样的bean赋值给引用类型

<bean id="Student" class="com.packe04.Student" autowire="byName">
     <property name="name" value="张三"/>
     <property name="age" value="15"/>

</bean>
   <!--
     引用类型赋值
    <property name="school" ref="School"/>
   -->
    <!--声明school-->
    <bean id="school" class="com.packe04.School">
        <property name="name" value="北京大学"/>
        <property name="address" value="北京"/>
    </bean>      
    <!--bytype注入-->
    <bean id="Student" class="com.packe05.Student" autowire="byType">
         <property name="name" value="张三"/>
         <property name="age" value="15"/>

    </bean>
       <!--
         引用类型赋值
        <property name="school" ref="School"/>
       -->

        <!--声明school,如果父类和子类的bean只能保留一个-->
<!--        <bean id="myschool" class="com.packe05.School">-->
<!--            <property name="name" value="北京大学"/>-->
<!--            <property name="address" value="北京"/>-->
<!--        </bean>
-->

在这里插入图片描述
(7)项目中使用多个spring配置文件
分多个配置文件的方式:
1.按功能模块分
2.按类的功能分,数据库相关操作类,service类一个配置文件,配置redis,事物等等一个配置文件,
3.spring管理多个配置文件,常用包含关系的配置文件,使用import标签包含其他的多个配置文件

总的文件下xml
<import resource="classpath:其他文件路径">

关键字"classpath": 类路径表示类文件class文件所在的目录,spring到类路径中加载文件,

(8)基于注解的DI
基于注解的DI
注解使用的核心步骤:
1.在源代码中加入注解,例如@component
2.在spring配置文件中,加入组件扫描器的标签

 <!--声明组件扫描器,使用注解必须加入这个语句
    component-scan:翻译过来就是组件扫描器,组件是Java对象
    属性:basse-package 注解在你的项目中的位置,
         框架会扫描这个包和子包中的所有类,找到类中的所有注解,
         遇到注解后,按照注解表示的功能,去创建对象,给属性赋值
    -->
    <context:component-scan base-package="com.packeone"/>

1.创建对象的注解
@component
@respository
@service
@controller

2.简单类型赋值
@value

3.引用类型赋值
@autowired :spring提供的注解,支持byname,bytype,
@autowired:默认bytype
@autowired @Qualifier :使用byname

@resource :来自jdk中的注解,默认是byname,
@resource:先使用byname,再使用bytype
@resource(name=“bean的名称”):只使用byname,

spring创建一个项目(idea maven项目)

学习源码在
链接:https://pan.baidu.com/s/1_dxberXPBQ9TdkO904ZEhw?pwd=yyc2
提取码:yyc2,
免费下载,代码不是特别规范,哈哈哈

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值