1.Spring介绍

    1.1spring 在项目中的位置

       首先我们来看下 spring  所在项目中的位置

Spring 框架 四天学习笔记_day01

 ssh 项目中, hibernate 负责对数据库的数据进行操作, servlice 由javabean 来控制事务, Struts2来控制web层的数据传输  , 我们的 Spring 框架, 就像是一个盒子 , 把 对象全部放在spring 中。



1.2.Spring一站式框架

    正式因为Spring 框架的性质是属于容器, spring 之所以能处理请求, 就是因为他里面装了能处理请求的对象,所以能处理请求, 因为容器中装了service 对象, 所以可以处理业务 ,为什么 能处理数据库? 因为装了能链接数据库的对象 , 本质就是一个容器,容器中装什么对象就有什功能, 所以可以一站使用 。Spring 的核心就是控制反转(IoC),和面向切面(AOP); Spring不局限与开发服务器项目 , 拿他开发安卓也可以,正是因为Spring 容器的性质, 所以可以和Struts hibernate Mybatis 不冲突(什么是冲突??? Struts 用来接受请求,返回响应 , hibernate用来操控数据库 , 他们功能不冲突)这点 不但不冲突还能增加 各个框架之间的粘合度, 所以, 以后开发中可能不用Struts  不用HIbernate 但是spring 一定会用的

2.框架的搭建

    2.1导包

Spring 框架 四天学习笔记_day01

官网下载这两个包

spring-framework-3.0.2.RELEASE-dependencies  这个包里面放了市场上常用的所有的开源的jar包 , 第二个spring-framework-4.2.4.RELEASE-dist ,是我们spring 使用的包,

Spring 框架 四天学习笔记_day01

打开之后有60个jar包, 这些部分供我们使用然后我们打开schema目录这里是我们要用的约束

Spring 框架 四天学习笔记_day01

60多个jar 包我们怎么导包?  ?通过观察 , 每三个是一对的, 然后等于有20个 jar包, 我们看下官方给的模块图

Spring 框架 四天学习笔记_day01

这里的每个模块, 都有一定的jar包 ,Core Container 表示的就是 核心包, 我们首先导入核心包

Spring 框架 四天学习笔记_day01

Spring 也是需要日志的, apache的日志包做的比较好,所以 Spring 直接用了 apache 的日志包我们还要导入日志包,如果是新版本直接导入一个spring 的包, 就行了, 如果是老版本的话, 就多导一个包, 最终如下:

Spring 框架 四天学习笔记_day01

这是处于稳妥起见。。 

2.2创建一个对象, 让Spring 装入对象 

    创建一个javabean 

Spring 框架 四天学习笔记_day01

2.3书写配置注册对象到容器中

    文件的配置规则就是  : : 哈哈 , 没有规则  ,名字对随便起,小编这里就取名为applicationContext.xml 啦,位置随意, 但是建议放在src 下 , 

 2.3.1导入约束

Spring 框架 四天学习笔记_day01

然后在配置文件中打“<” 如果出现提示, 就导入成功!!!

 2.3.2

然后我们把user 对象配置到spring   , 将user 对象, 交给spring管理 :

Spring 框架 四天学习笔记_day01

2.4测试

   然后我们测试 刚刚的配置 创建一个Demo 进行测试  如下

Spring 框架 四天学习笔记_day01

ClassPathXmlApplicationContext() 

 调用这个实现类的构造方法直接传入路径,默认实在src 下的路径, 然后就可以读取到配置文件, 

getBean(string ) 传入name 就可以获取 对象 

getBean(class)  传入对象的class对象 , 获取 对象 

Spring 框架 四天学习笔记_day01

Helloworld  成功, !!!!!

3.Spring 概念

    3.1思想

    IOC概念

      (inverse of control )  反转控制 ,: 将我们创建对象的方式反转, 之前的对象的创建是由开发人员自己维护, 包括依赖关系, 也是自己注入,使用sping 之后,对象的创建以及对象中依赖关系,可以有spring 完成创建以及注入,所谓的反转控制就是反转创建对象方式 。 从我们自己创建,反转给了程序。 

    3.2DI 概念 

            实现IOC思想需要DI做支持,

 注入方式:set 方法注入 , 构造方法注入, 字段注入, 

注入类型 : 值类型注入(八大基本类型) , 引入类型注入(依赖的对象,)

    3.2 applicationContext&BeanFactory

beanFactory 

 是最底层的接口, 是功能最少的接口,随着共实现接口的众多, 功能不断的增长 , 针最原始的接口, 功能比较单一, 他的特点是, 每次获得 对象时候才会创建对象,区别于applicationContext application context 是一次性把对象创建好, 调用直接取出,(为什么会这样节省? 因为这接口出现的比较早,当时硬件配置比较低, 害怕内存移除 !!)

applicationContext  

 这个容器是实现/继承 最末端的 , 他是 一次加载所有的对象加载容器中, 所以他的功能比较强大,能够提供更强大的功能,web 开发中, 使用applicationContext , 如果在资源匮乏的时候吗, 用BeanFactory (比如 手机, 硬件发展还在高速时期, 电脑相对发展比较慢了,inter 就开始向低耗能方向研究了);

    ClassPathXmlApplicationContext : 从类路径下加载配置文件 

     FileSystemXmlApplicationContext :从硬盘下加载配置文件 (从java跨平台来看没啥用)

3.3Bean元素详解 (配置文件)

   | --bean  : 使用该元素描述需要配置的spring容器管理对象

         |--name  : 给管理的对象起个名字 (名称可以重复, 可以使用特殊字符,开发中不推荐名称重复)

        |-- class  : 被管理的对象的完整类名(用类型实例化对象(反射))

        |--id   : 与name属性一摸一样, 但是id 是不能重复并且不能使用特殊字符(在早年, spring 和struts1 结合的时候 action需要/ 但是如果用id  就会报错产生冲突,id 在整个软件不能坏, 所以就从产生了name  name 比较灵活, )

    结论 : 尽量使用name  

3.4.spring创建对象的方式

     1. 空参构造方法, 所有对象的创建 都是要调用空参构造的

       2 .静态工厂创建 工厂创建如下

Spring 框架 四天学习笔记_day01

在applicationContext 中配置工厂类

Spring 框架 四天学习笔记_day01

调用工厂类创建user 对象  

Spring 框架 四天学习笔记_day01

结果如下: 

Spring 框架 四天学习笔记_day01

    3. 实例工厂

Spring 框架 四天学习笔记_day01

    如果不是静态方法的话, 就要首先创建对象,然后进行调用里面的方法 , 配置文件如下

Spring 框架 四天学习笔记_day01

    测试 : :

Spring 框架 四天学习笔记_day01

3.5 Bean进阶, scope属性

    scope属性 : 

        1. singleton(默认值) 单例对象  (表示为单例的对象, 在spring中只会存在一个实例)

Spring 框架 四天学习笔记_day01

        2. prototype  多例 被标识为多例的对象,每次获得时候才会创建, 每次创建的都是新的

             测试 : 更改配置, 然后创建两次 做比较

(这里大部分都是单实例, 用的是singleton  ,但是 当spring 和struts 结合时候, Action 要保存在spring 中,这里的Action 一定要配置为多实例 prototype, 因为struts 从架构上来说, 就是每次请求创建一个action,例如: 如果10个请求过来, 要向spring要Action 但是如果单实例,呢就出现异常了); 

        3.request : 在web 环境下, 对象与request   请求生命周期一直 

        4.session  : 在web环境下, 对象 与session 生命周期一样

3.6模块化配置

     模块化配置 : 

            一个页面包含多个模块,  导入其他spring 配置文件

Spring 框架 四天学习笔记_day01


4 . Spring 中的属性注入

    4.1 set 方法注入(最重要)

            Spring 框架 四天学习笔记_day013

       对象的注入  

Spring 框架 四天学习笔记_day01


    4.2造函数注入

        Spring 框架 四天学习笔记_day01    会调用空参构造,和构造方法, 进行赋值 , 如果我们想改变顺序用constructor-arg  中的index属性可以改变构造方法中的参数法制顺序 :

 Spring 框架 四天学习笔记_day01

 属性介绍 : 

    index  : 属性的顺序 

     type : 属性的类型

     name: 属性的名称

     value  : 属性的值

    4.3 p名称空间注入

 xmlns:p="http://www.springframework.org/schema/p" 在约束上边添加这样一个约束 

Spring 框架 四天学习笔记_day01

p 名称空间注入, 是spring 新的方法 本质还是set 方法, 比较简单

    4.5  spel注入

    4.6复杂类型注入

    Spring 框架 四天学习笔记_day01

        Array  : 

       如果只注入一个值的话, 可以用 value  & ref  : 

Spring 框架 四天学习笔记_day01

         如果注入多个值的话, 就用list  属性, 然后他的子节点, value  和ref  进行多值

Spring 框架 四天学习笔记_day01

    list &set :  

    如果是一个值, 当然可以用value    如果配置多个值, 和array 没有任何区别

    map  : 

     Spring 框架 四天学习笔记_day01

 map 集合的键值对, 都可以是对象属性; 

  properties  : 

Spring 框架 四天学习笔记_day01

    props   prop 属性进行配置文件





相关文章: