struts是web框架(jsp/action/action)

hibernate是orm框架,处于持久层。

spring是一个框架,是容器框架。用于配置bean,并维护bean之间关系的一种框架。

spring中有一个非常重要的概念:bean(是java中的任何一种对象,javabean/service/action/数据源.../dao,ioc(控制反转 inverse of control) di(dependecy injection 依赖注入)。

spring框架,它可以管理web层,业务层,dao层持久层。所以它叫容器框架。

该spring可以配置各个层的组件(bean),并且维护各个bean之间的关系。

快速入门

spring是开源框架

开发一个spring项目

1.引入spring的开发包(最小配置spring.jar 该包把常用的jar都包括,还要写日志包 common-logging.jar)

2.创建spring的一个核心文件,applicationContext.xml,[hibernate 有核心 hibernate.cfg.xml

structs核心文件 structs-config.xml,该文件一般放在src目录下,该文件中引入xsd文件:可以从给出的案例中拷贝一份即可。

3.配置bean

4.在Test.java中,我们怎么使用

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService us = (UserService)ac.getBean("userService");
us.sayHello();

spring框架原理图(spring框架什么时候被加载,spring中配置的bean,

ClassPathXmlApplicationContext("");这句话非常重要。

1.当ClassPathXmlApplicationContext("")被执行的时候,我们的spring容器对象就被创建,同时applicationContext.xml中配置的bean就会被创建(内存[HashMap/HashTable ])

2.UserService us=(UserService)ac.getBean("userService);us.sayHello();

us其实就是bean中id为userService。

3.

<bean id="userService" class="com.service.UserService">
<!-- 这里就体现出注入的概念 -->
<property name="name">
<value>韩顺平</value>
</property>
<!-- 在userService中引用bybService bean -->
<property name="bybService" ref="bybService"/>

</bean>

4.在Test.java中,我们怎么使用

//我们现在使用spring来完成上面的任务
//1.得到spring的applicationContext对象(容器对象)
//applicationContext对象就对应applicationContext.xml
//ac就是容器
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService us = (UserService)ac.getBean("userService");
us.sayHello();

5.细节讨论?

传统的方法和使用spring的方法

5.1 使用spring,没有new 对象,我们把创建对象的任务交给spring框架

深入探讨:(dom4j+java反射机制)

userService = Class.forName("com.service.UserService");

userService.setName("韩顺平");

bybService = Class.forName("com.service.BybService");

bybService.setName("小明");

userService.setByeService(bybService);

applicationContext=new HashMap();

applicationContext.put("userService",userService);

applicationContext.put("byeService",bybService);

5.2 spring的运行原理图:

5.3我们再看spring

对上面案例总结:

spring实际上是一个容器框架,可以配置各种bean,并且可以维护bean与bean的关系,当我们需要使用某个bean的时候,我们可以getBean(id),使用即可。

spring是一个容器框架,它可以接管web层,持久层,dao层,可以配置各种bean,并且可以维护bean与bean的关系,当我们需要使用某个bean的时候,我们可以getBean(id),使用即可。

ioc是什么?

答:ioc(inverse of controll)控制反转:所谓控制反转就是把创建对象(bean),和维护对象(bean)的关系的权利从程序中转移到spring的容器文件(applicationContext.xml)中,而程序本身不再维护了。

DI是什么?

答:di(dependency injection)依赖注入:实际上di和ioc是同一个概念,spring的设计者认为di更能准确表示spring核心技术。

一、IOC介绍

1.IOC是控制反转。

2.传统资源查找方式:要求组件向容器发起请求,查找资源作为回应,容器适时返回资源。

3.IOC查找方式:容器会主动将资源提供给它所管理的组件,组件只需要选择一个合适的方式来接收资源,也被称为查找的被动式。

4.创建对象实例的控制权从代码控制剥离到IOC容器控制(之前的写法,由程序代码直接操控使用new关键字),实际就是你在xml文件控制,控制权的转移是所谓反转,侧重于原理。

二、DI介绍

1.DI是依赖注入

2.IOC的另一种表达方式:组件以一些预先定义好的方式(如:setter方法)接收来自容器的资源注入。

3.相对于IOC而言,这种表述更加直接。

4.创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现。

属性注入(最常用)

1.通过set方法注入Bean的属性值或依赖的对象。

2.name属性:制定Bean属性set方法后的属性名。

3.value属性值:可以使(value)子节点指定属性值。

构造器注入

1.通过构造器注入Bean属性值或依赖对象,它保证Bean实例在实例化后可以使用。

2.构造器注入在<constractor-arg>一样。

三、区别

1.它们是spring核心思想的不同方面的描述。

2.依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。

依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;

而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。

学框架,就是学配置。

学习框架,最重要的就是学习配置。

把ApplicationContext做成一个单例的。

web层

structs充当web层,接管jsp/action/表单

主要体现出mvc的数据输入,数据的处理和数据的显示分离

model层是一个很大的概念,model层和持久层、业务层的关系?

model层和业务层,model层(业务层+dao层+持久层),mvc中去掉v和c都是model.

这里强调一下,在一个项目中不一定全部有,可以根据实际情况选择。

hibernate(orm框架),持久层,体现oop,主要解决 关系模型和对象模型之间的阻抗。

spring框架,它可以管理web层,业务层,dao层,持久层,该spring可以配置各个层的组件(bean),并且维护各个bean之间的关系

配置各种bean

web层 action解决action单例问题

业务层 service/domain/dao

持久层:数据源

spring学习(1)的更多相关文章

  1. spring 学习之 bean 的注入方式 property和constructor-arg的使用方式

    spring 学习之 bean 的注入方式 property和constructor-arg的使用方式. bean的注入方式: property 注入是: 通过setxx方法注入. construct ...

  2. Spring学习之AOP总结帖

    AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对组件(比如类)进行开发,然后对组件进行组 ...

  3. Spring学习之第一个AOP程序

    IOC和AOP是Spring的两大基石,AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对 ...

  4. MyEclipse Spring 学习总结三 SpringMVC

    MyEclipse Spring 学习总结三 SpringMVC 一.SpringMVC原理 1.Springmvc 框架介绍 1)Spring 框架停工了构建Web应用程序的全功能MVC模块.Spr ...

  5. Spring学习 Ioc篇(一 )

    一直以来忙于项目的开发,Spring虽然不用,一直想系统地学习一下,想看看它的源码,都没有时间,这段时间比较充裕,就索性先把Spring学习下,熟悉各个功能再去探究它内部的实现.就从Ioc篇开始学习. ...

  6. Spring学习(三)——Spring中的依赖注入的方式

    [前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring.不知 ...

  7. Spring学习(二)——Spring中的AOP的初步理解[转]

      [前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring. ...

  8. 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展

    <Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...

  9. Spring学习8-Spring事务管理

      http://blog.sina.com.cn/s/blog_7ffb8dd501014e0f.html   Spring学习8-Spring事务管理(注解式声明事务管理) 标签: spring注 ...

  10. Spring学习之Ioc控制反转(1)

    开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...

随机推荐

  1. 第二章:核心C#

    变量 如果在一条语句中声明和初始化了多个变量,那么所有的变量都具有相同的数据类型 Int x=10,y=20: 变量使用前需要赋初始值 声明不同类型的变量需要单独的语句. 变量的初始化 变量时类或者结 ...

  2. 分析Memcached客户端如何把缓存数据分布到多个服务器上

    Memcached客户端可以设多个memcached服务器,它是如何把数据分发到各个服务器上,而使各个服务器负载平衡的呢? 可以看看.net版中的客户端中的源码,就可以知道 先看代码:   1 /// ...

  3. Tautology - poj 3295

      Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10437   Accepted: 3963 Description WF ...

  4. TBSchedule源码阅读1-TBScheduleManagerFactory

    TBSchedule 1 TBScheduleManagerFactory 初始化    成员变量    ZKManager;    IScheduleDataManager;    Schedule ...

  5. WPF 员工卡条形码

    大家都知道条形码(Barcode)是一种可以由机器识别的特殊编码,在生产.生活中也常常会见到并使用它.条形码的类型和种类很多感兴趣的朋友可以详细了解一下.其中Code 39 可以说是一种最为常见并广泛 ...

  6. Android平台录音音量计的实现

    今天博主要给大家分享的是怎样在Android平台上实现录音时的音量指示计.开门见山.先来看一张Demo的效果图: 如上图所看到的,两个button各自是開始录音和停止录音,中间的两个数字前后分别代表音 ...

  7. php修改密码

      为了让页面更为好看一些,我一般会选择bootstrap,写起来虽然看着麻烦,但是我们真正需要的只有中间的内容  下面是html的内容 <div id="tbx"" ...

  8. 九度OJ 1345:XXX定律之画X (递归)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:361 解决:157 题目描述: 给你一个n,然后让你输出F(n) 规则是这样的,F(n)的输出结果是: F(n-1)     F(n-1) ...

  9. Qt插件开发入门(两种方法:High-Level API接口,Low-Level API接口)

    Qt中为我们提供了两种开发插件的方式.一种是使用High-Level API接口,一种是使用Low-Level API接口.所谓High-Level API 是指通过继承Qt为我们提供的特定的插件基类 ...

  10. Bootstrap学习3--栅格系统

    备注:最新Bootstrap手册:http://www.jqhtml.com/bootstraps-syntaxhigh/index.html 目录1.简介2.栅格选项3.列偏移4.嵌套列5.列排序 ...