博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring01
阅读量:6909 次
发布时间:2019-06-27

本文共 5634 字,大约阅读时间需要 18 分钟。

一、spring介绍

1、spring的概念、特点

  概念:

  spring是一个分层的开源的轻量级框架,实际上是一个存放对象的容器,核心是控制反转(IoC)、面向切面(AOP),项目中所有对象的创建和依赖关系的维护都交给spring来管理,不用再自己创建和维护;

  特点(优势):

    

2、准备工作:

  导入jar包:

    

  导入约束(即引入新的命名空间Namespaces):

   

3、注册对象到容器中(举例)

4、IoC思想(控制反转):涉及到DI(依赖注入技术)和IoC思想,IOC思想的实现要依赖于DI技术;控制反转指的是,对象的创建和管理交给spring而不是开发者手动创建;

  

5、两个接口的对比

  BeanFactory接口(顶层接口,其实现类的功能单一,已过时,在资源匮乏的时候会使用,因为他只有在每次获得对象的时候才创建对象);

  ApplicationContext接口(继承于BeanFactory接口,实现类的功能较多,特点是:每次容器启动时,就会创建容器中配置的所有对象,获取对象时,直接在里边取即可);

6、spring简单配置

  (1)Bean元素(配置文件xml的根元素)的配置:将对象交给spring来管理,用Bean元素来描述需要spring管理的那些对象,如下图:

    

    然后,比如在测试类里需要获取对象时,可以:

    

7、spring创建对象的三种方式

  (1)空参构造方式:上述6里边的图片,创建一个User类,在xml里配置name,class属性后,通过User的空参构造方法来创建对象user;

  (2)静态工厂方式:首先创建一个UserFactory(工厂类),类里边定义一个静态的方法(因此叫静态工厂方式),获得User的对象user:

    

  (3)动态实例化方式:将上述UserFactory(工厂类)里的静态方法换为非静态的方法,这时候,xml里的配置有些变化:如下是(2)(3)两种方式的不同配置方式:

      可以看到,(3)中由于工厂方法是非静态的,所以配置的时候需要先配置,创建UserFactory的实例化对象,再用该对象调用createUser2()方法,获取user对象;

      其中多了一个factory-bean属性,切记;

    

    结论:(1)用得最多,(2)(3)基本不用,了解即可;

二、spring配置详解(进阶)

  说明:除了一中简单的bean配置,下面介绍详细的spring配置:

  1、<bean></bean>里边的scope属性;

   常见的四种属性值:(重点是前两种)

   (1)singleton(单例),这是默认的,不写的话,默认创建的是单例对象;

      User  u1 =  ac.getBean("user");

      User  u2 =  ac.getBean("user");,这里u1和u2是同一个对象,打印(u1==u2)时返回true;并且只调用了一次空参构造方法; 

   (2)prototype(多例),每次创建时都会调用一次空参构造,且每次创建的都是不同对象;

   (3)request:web环境下,对象与request生命周期一致;(了解,即使在web环境下也基本不用);

   (4)session:web环境下,对象与session生命周期一致;(了解,即使在web环境下也基本不用);

  结论:(1)(2)比较常用,以后开发中大部分使用(1)单例模式;(2)在struts2中使用,在struts2中,根据struts2架构的设计,action对象每次获取时必须是一个新的对象交给spring来管理,所以action必须设置为prototype(多例)。

  2、初始化&销毁方法(即生命周期方法)

  在bean里配置两个方法:<bean  init-method="init"  destroy-method="destroy"></bean>,然后还要在User类里边定义这两个方法,注意名字要与init/destroy一致,这样的话,每次创建完对象之后(空参构造调用之后),就会执行init的方法,但是要想调用到destroy方法,必须在测试方法里获取完对象之后,添加:ac.close(),这里的ac必须是ApplicationContext子类ClassPathXmlApplicationContext的对象,才能调用close方法;

  3、模块化配置

    在spring配置文件中引入其他配置文件,不需要将所有配置写在一个文件中;

    

  4、spring属性注入(4种)

  (1)set方法注入(带头大哥级别,最简单,最重要的):这种方法要求User类里边必须有set方法;

    注:User类里边如果有对象属性(如下面的User类里的car对象),普通的属性值用value,对象属性的值(引用)用ref;

      即先把car对象配置在容器中,然后再user里用ref引用;

    class  User{

      private  String  name;

      private  int  age;

      private  Car  car;//这里就是car对象,当然,也要创建Car类

    } 

1 
2
3
4
5
6
7
8

  <!-- 将car对象配置到容器中 -->

    <bean name="car" class="cn.itcast.bean.Car" >
      <property name="name" value="兰博基尼" ></property>
      <property name="color" value="黄色" ></property>
    </bean>

  (2)构造函数注入

1     
2
3
4
5
6
7
8
9 10 11 注:index是为了区分当Bean类有多个构造函数时,按索引走哪个构造函数;12 type是为了区分多个构造函数,但是函数参数类型不同时,根据type来确定走哪个构造函数;

  (3)p名称空间注入(spring新研发的)

1 
7
8

  (4)spel注入(spring  Expression  Language , spring EL表达式)

    注意下面代码中的绿色文字;

1 
4
5
//固定格式#{},可以取user的name6
//取user3对象的age7
8
//注:对象属性的引入,不能使用spel的方法!!!

  (5)复杂类型注入(数组、集合、map、Properties类型属性的注入)

  比如:

    

  下边分别介绍:

1 
2
5
6
7
8
tom
9
jerry
10
11
12
13 ----------------------------------------------------------------------------- 14
16
17
18
19
jack
20
rose
21
22
23
24 -----------------------------------------------------------------------------25
26
27
28
29
30
31
32
33 -----------------------------------------------------------------------------34
35
36
37
com.jdbc.mysql.Driver
38
root
39
1234
40
41
42

 三、总结一下以上的内容

1.spring介绍    spring并不局限于某一层.    spring是对象的容器,帮我们"管理"项目中的所有对象    2.spring搭建    1>导包 4+2(仅指的是spring的包)    2>准备类    3>书写配置(src/applicationContext.xml,使用eclipse的话,配置文件建议写在src下)    4>书写代码测试    3.spring中的概念    ioc: 反转控制. 创建对象的方式反转了.从我们自己创建对象,反转给spring(程序)来创建.        di: 依赖注入.将必须的属性注入到对象当中.是实现ioc思想必须条件.        beanFactory与ApplicationContext    4.配置文件详解        bean元素        id:    给Bean起个名字        不能重复,不能使用特殊字符.早期属性.        name:给Bean起个名字        能重复,能使用特殊字符.后来属性.        class:类的完整类名    生命周期属性        init-method        指出初始化方法        destory-method  指出销毁方法    作用范围        scope:             singleton(默认值):单例.创建容器时会立即创建单例对象            prototype :多例.每次获得对象时,才会创建对象,并且每次都会创建新的对象    分模块开发        
5.Bean的创建方式 *空参构造创建 静态工厂 实例工厂6.注入方式 *set方法 *构造方法 p名称空间 spEL表达式 7.复杂属性注入 Array List Map Properties8.在WEB环境中使用Spring容器(struts2) 1>导包 4+2+1(spring-web) 2>在web.xml中配置listener => ContextLoaderListener |-配置参数,指定spring配置路径 3>在Action中,使用工具类获得容器. |-WebApplicationContextUtils.getWebApplicationContext(ServletContext sc)

 

posted on
2018-02-22 15:55 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/limuma/p/8459171.html

你可能感兴趣的文章
如何雇人的十五条建议
查看>>
2011年以来发表文章一览表
查看>>
靠外援打call的搜狗,AI会是未来吗?
查看>>
.NET性能分析最佳实践之:如何找出使用过多内存的.NET代码(基础篇)
查看>>
活字格 Web 应用生成平台 V4.0 发布,首次公开插件机制
查看>>
Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(7)...
查看>>
华为RH5885H v3服务器RAID设置及问题解析
查看>>
【翻译】使用Sencha Ext JS创建美丽的图画(1)
查看>>
Windows Server 2012安装选项、界面等级详解
查看>>
把Lumia 610C作为3G路由器
查看>>
Exchange 2010与Exchange Online混合部署PART 4:混合部署
查看>>
让域控制器强制向DNS服务器注册SRV记录
查看>>
Dalvik虚拟机的运行过程分析
查看>>
docker集群存储软件etcd安装
查看>>
技术面试备忘录,饭可以乱吃,话不能乱说!
查看>>
Oracle ASM实例同filesystem间的文件传输
查看>>
两种快速打造App的方法
查看>>
数据仓库入门(实验9)查询多维数据集
查看>>
linux find命令详解
查看>>
通过SSH远程连接Cisco设备
查看>>