Spring学习笔记 Part.01
Hibernate的作用:
1.可以解决以面向对象的方式操作数据库的问题
请求参数(String)→Strut2→Action(对象)→业务逻辑组件(面向对象)
2.所以任何一个ORM框架都可以代替Hibernate,JPA更加可以;
Spring能做什么?
A.解决各层组件之间的硬编码耦合(类名的直接耦合)
可以让各组件之间以“面向接口”的方式编程,从而提供更好的可扩展性
B.能解决事务、权限检查等这种具有通用性质、横切性质的处理逻辑
C.Spring提供了对大部分操作的简化功能
Spring再次简化了开发者的工作量
两大功能:
- 提高程序的可扩展性、可维护性
- 可以提高程序员的开发效率
==============解决各组件之间的硬编码耦合(类名的直接耦合)==============
1.让各组件之间面向接口编程;
2.程序员还需要自己写一个工厂,组件通过工厂去主动获取它所依赖的组件
Spring是什么?
Spring是大工厂,所有的Java对象都可由它来产生,它是所有对象的工厂,超级工厂
Spring的安装:
(1)导入Spring Jar包
(2)增加一个Spring配置文件
(3)获取Spring容器(Spring工厂),再通过工厂去获取工厂中的产品
Spring容器(超级工厂)
1. BeanFactory
AppicationContext
CassPathXmlApplicationContext FileSystemXmlApplicationContext
A组件,需要去调用B组件的方法
- 称为A组件依赖B组件
- 传统模式下: A组件主动去创建B组件
- 工厂模式下: A组件调用B组件的工厂去获取B组件
- Spring模式下: A组件只要为B组件提供一个setter方法即可,然后在Spring配置文件中配置即可
Spring的本质:
通过XML配置来驱动Java代码
Spring用的熟,几乎所有Java代码都放在XML去配置
要求:眼中看到的XML配置,心中想的是执行的Java代码
ApplicationContext多BeanFactory的如下功能:
A.国际化支持
B.支持资源(来自磁盘、网络、IO流、Web应用的文件或数据)访问
C.加载多个配置文件
D.事件支持
每个Bean除了可拥有id之外,还可以拥有很多个别名(外号)
/**************************************************
Spring是一个超级大工厂
对Spring来说:一切都是Bean
即使构造器私有(用private修饰),Spring依然可以创建Bean的实例
**************************************************/
Bean的作用域:
singleton - 当ApplictionContext初始化时,容器会自动初始化所有singleton Bean
每次程序向Spring容器请求时,Spring容器总是返回最开始创建的singleton Bean
prototype- 每次程序向Spring容器请求时,Spring容器会临时去创建prototype Bean
request - 要在Web应用才有效。每个用户请求,Spring创建一个Bean实例
request - 要在Web应用才有效。每个用户会话,Spring都只创建一个Bean实例
global session -在portlet context才有效
/******************************************************************
W3C推荐:
XML文档应该多用于子元素,少用属性。
<user name="孙悟空" address="花果山"/>
与下面方式对比
<user>
<name>孙悟空</name>
<address>花果山</address>
<user>
可以扩展
<user>
<name>
<first>悟空</first>
<last>孙</last>
</name>
<address>
<detail>花果山</detail>
<zip>5423423</zip>
</address>
<user>
W3C告诉我们:应该多用子元素,尽量少用属性,子元素是扩展性更好
******************************************************************/
无论是<property .../>(调用setter方法)还是<constructor-arg.../>(有参数的构造器)
=================需要传入各种类型的实参=================
1.基本类型及其包装类、String、Date等标量类型。用value属性或value子元素传入值
2.自定义类。需要ref或嵌套Bean传入值
3.List、Set、数组、Map等集合
==============嵌套Bean==============
嵌套Bean不是直接定义杂<beans.../>元素中,而是定义在<property.../>或<constructor-arg.../>里
结论:嵌套Bean与外层的Bean的配置几乎完全一样的。
只是嵌套Bean不需要id,Spring容器不能直接访问。嵌套Bean是作为setter方法、构造器的参数值;
==============注入集合属性==============
list 元素负责创建List集合和数组
map元素负责创建Map集合
set元素负责创建Set集合
props元素负责创建Properties集合
================依赖检查================
它不会产生实际的影响,它会对配置文件进行语法层次的检查
强制要求必须为setter方法配置合适的依赖注入
在有些时候,程序员可能由于某些失误,导致配置文件出错,或漏了配置
========实例化Bean的3种方式========
1.调用构造器来创建Bean
2.调用工厂类的静态工厂方法
3.调用实例工厂的实例工厂方法
无论是静态工厂方法,还是实例工厂方法,都需要增加一个factory-method属性
实例工厂方法,还需要指定factory-bean属性
/*******************************
今天的要点:
1.创建对象的3种方式
2.如何控制它调用有参数的构造器
3.如何控制执行的setter方法
4.如何为setter方法/构造器传入参数值
*******************************/
==========FactoryBean==========
它是一个接口,接口里有3个方法:getObject()、getObjectType()、isSingleton();
如果一个Bean实现了该接口,并在容器中配置了该Bean,接下来程序获取该Bean的时候,实际上返回的只是该Bean的getObject方法的返回值。
由于getObject()方法由程序员自己实现,因此我们想在这个方法里做什么就可以做什么。
==========BeanNameAware==========
如果MyBean实现了BeanNameAware接口
Spring创建该Bean之后,会立即、自动调用它的setBeanName方法
通过BeanNameAware接口,保证我们在首先Bean类时,就可以获得配置该Bean时指定id
==========Bean的生命周期==========
Bean有4个作用域:singleton prototype request session
对于singleton作用域的Bean,Spring会负责管理它的生命周期
singleton Bean与Spring容器的生存期限是相同的
Spring创建Bean实例之后,会立即调用它的对应的setter方法
1.Bean设值注入之后,添加自己的处理代码
A.让Bean实现InitializingBean
B.直接用init-method属性来指定初始化方法
--这两种机制,只要使用一种即可;
2.Bean销毁之前
A.让Bean实现DisposableBean
B.直接用destroy-method属性来指定销毁之前的方法
--这两种机制,只要使用一种即可;
*******Bean生命周期行为*******
创建实例 → 注入依赖关系
↓
Bean初始化过程 | 调用afterPropertiesSet
| ↓
| 调用init-method方法
↓
对外提供服务
↓
Bean销毁之前的行为 | 调用destroy
| ↓
| 调用destroy-method方法 → Bean实例被销毁
Spring学习笔记 Part.01的更多相关文章
- 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展
<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...
- spring学习笔记(一) Spring概述
博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书. 强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...
- Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)
在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...
- Spring学习笔记2——表单数据验证、文件上传
在上一章节Spring学习笔记1——IOC: 尽量使用注解以及java代码中,已经搭建了项目的整体框架,介绍了IOC以及mybatis.第二节主要介绍SpringMVC中的表单数据验证以及文件上传. ...
- 不错的Spring学习笔记(转)
Spring学习笔记(1)----简单的实例 --------------------------------- 首先需要准备Spring包,可从官方网站上下载. 下载解压后,必须的两个包是s ...
- 【Spring学习笔记-MVC-15.1】Spring MVC之异常处理=404界面
作者:ssslinppp 异常处理请参考前篇博客:<[Spring学习笔记-MVC-15]Spring MVC之异常处理>http://www.cnblogs.com/sssl ...
- 【Spring学习笔记-MVC-13.2】Spring MVC之多文件上传
作者:ssslinppp 1. 摘要 前篇文章讲解了单文件上传<[Spring学习笔记-MVC-13]Spring MVC之文件上传>http://www.cnblogs.co ...
- 【Spring学习笔记-MVC-9】SpringMVC数据格式化之日期转换@DateTimeFormat
作者:ssslinppp 1. 摘要 本文主要讲解Spring mvc数据格式化的具体步骤: 并讲解前台日期格式如何转换为java对象: 在之前的文章<[Spring学习笔记-MVC ...
- 【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回
作者:ssslinppp 时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MV ...
随机推荐
- NeHe OpenGL教程 第四十五课:顶点缓存
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- Bugtags 与其它产品的区别
如果您刚刚接触 Bugtags,可能心里会有这样的疑问,下面将介绍 Bugtags 与其它的一些产品的区别. Bugtags 不是做统计的 SDK 大家都会在 App 里集成用户数据统计的 SDK,但 ...
- Code Igniter + PHP5.3 + SqlServer2008配置
1.配置apache+php5.3 2.配置sql server服务器,并允许远程连接. 3.去http://www.microsoft.com/en-us/download/details.aspx ...
- 113、ScrollView滑动到了最底部
ScrollView使用 http://www.cnblogs.com/androidsj/archive/2012/03/04/2379387.html 滚动到顶部判断:getScrollY() = ...
- centos之Haproxy 负载均衡学习笔记
HAProxy的特点是:1.支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机:2.能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作3.支持url检测后端的 ...
- NGUI之UILabel
重要属性说明 overflow: Shrink Content: 意味着内容会自动被缩小以便适应区域.它在你使用动态字体的同时使用Keep Crisp设置时有效,让字体变小,而不是缩放内容. ...
- tomcat下的https项目创建与部署
1.1 生成keystore文件及导出证书 步奏1:打开控制台,运行: %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA (如果你已经 ...
- cocos2d-x + Lua接入iOS原生SDK的实现方案[转]
相信很多朋友在使用cocos2d-x+lua开发游戏时都遇到过接入iOS原生SDK的问题,比如常见的接应用内支付SDK,广告SDK或是一些社交平台SDK等等,我也没少接过这类SDK.这篇文章主要是对我 ...
- IMX6 PCA9698应用层读写库
.c #include <stdio.h> #include <string.h> #include <linux/types.h> #include <st ...
- python socket和socketserver
Python提供了两个基本的socket模块.一个是socket,它提供了标准的BSD Socket API:另一个是socketServer,它提供了服务器中心类,可以简化网络服务器的开发. 下面先 ...