Spring--laobai1
1 spring的概念 (spring:ioc对象工厂+aop。)
apache推出的java企业框架,提供了基于ioc的对象工厂、aop功能及其他增强功能。
2 控制反转(ioc):inversion of control。 削减计算机程序的耦合问题
控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。
应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。
方法论:
我们需要的对象,不是由我们自己创建,而是由外部容器事先准备好,我们需要时才去拿。
--优点:专注业务,无需关注对象的创建。同时外部的容器允许对象具有可替代性,更加灵活。
// A a = new A(???); //亲自去创建对象
使用ioc后==>
A a = factory.getBean("a")://从外部对象工厂去拿对象。
a.test();
spring框架提供了ioc的一种代码实现方式:di=依赖式注入(depency injection).
综合应用了java的xml\面向对象\反射技术。
class Superman
{
IFly tool; //持有抽象接口
main()
{
sm.setTool(new Plane()/new Bird())
}
}
3 spring的基础配置
a 对象的生命周期
bean的生命周期:scope--singleton(默认)、prototype(原型)、session、request、
singleton--单例。【默认】
prototype--原型,每次获取都创建新的对象。
request--和request对象生命周期一致。获得响应后释放。
session--和session对象生命周期一致。setMaxInactiveInterval()//超过最大无活动时间就释放。
或session.invalidate()
b 对象工厂的延迟创建
lazy-init = true. 默认是false,在创建工厂时自动创建。
c 构造注入:本质上是通过分射调用有参构造函数
<bean id="plane1" class="Plane" lazy-init="true">
<constructor-arg>
<value>入参1的值</value>
</constructor-arg>
<constructor-arg>
<value>入参2的值</value>
</constructor-arg>
...
</bean>
<bean id="" class="">
<constructor-arg> <!--构造注入--> 调用的是有参构造函数来初始化属性值
<value>
</value>
<ref>
</ref>
<bean>
</bean>
</constructor-arg>
</bean>
设值注入:本质上是通过反射调用setXxx方法
<bean id="plane1" class="Plane" lazy-init="true">
<property name="属性1名" value或ref/>
<property name="属性2名" value或ref/>
</bean>
c 自动装配
让spring自动完成多个对象间的装配关系
no:默认,不自动装配
byName:靠属性名和bean的ID进行识别
byType:靠属性类型和bean的class进行识别。要保证 符合该type的bean唯一,否则会报错。
constructor:靠构造函数入参的属性名进行识别
4 spring复杂对象的装配
a 拥有引用对象的数组:NBA拥有30支球队。 <list>标签
b 拥有引用对象的map: SportsScore: <map>标签
5、aop
aspect oriented programming。 面向“切面”编程。对面向对象编程的“补充”。
作用是在不修改源代码的前提下,给程序添加“业务无关”的公共功能。
常用的公共功能:
日志
权限管理
事务:支持事务的提交和回滚。有些框架,事务是必须的。
注意点:业务类必须定义接口才能支持aop。
aop的原理
一种设计模式:代理模式: 静态代理、动态代理。
aop的专用术语
advice(通知):新的公共功能
joinpoint(切点=织入点):通知插入代码的位置。
pointcut(切线):所有的切点构成1条切线
aspect(切面):切线+通知。
weaving:织入。
第三天:
spring对数据持久化的支持
1 提供了对jdbc的封装类(工具类) JDBCTemplate
目的:不使用单独的持久层框架,减少数据库操作效率的牺牲。
原理:利用spring定义数据源(DataSource)对象,对tomcat的连接池进行管理。
步骤:a 建工程建立包
b 导入3个jar包。(commons-collections.jar\commons-pool.jar\mysql-connector-java-5.1.18-bin.jar)
c spring向导生成xml文件
d xml文件中配置数据源(连接池)
e 编写dao类
2 hibernate生成dao类
缺陷:对于删除,修改,添加需要在业务层开启事务。
3 提供了对Hibernate的封装类 HibernateDAOSupport
a 先建工程建立包
b 导入hibernate框架
c 导入Spring框架(core,persistend core,aop)
d 配置applicationContext.xml
i sessinFactory--自动生成
ii:配置dao对象,引用上面的sessionFactory
e 书写dao代码(需要定义接口,实现类从HibernateDAOSupport派生)
f 对于添加,修改及删除操作,必须使用spring的aop配置,将事务注入到dao的上一层,也就是biz类中
注意:(1) 事务注入到biz层。
(2) 在biz的上一层,也就是test类或控制器类通过try来知道是否执行成功。
步骤:
a 创建biz包
加入biz和biz的实现类。
b biz实现类中,持有抽象的dao;
c 在application.xml中加入头
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
d 在application.xml中,添加biz的bean,引用上面的dao
e 在application.xml中,创建事务管理bean和tx:advice通知,指定add方法开启事务
f 在application.xml中,通过aop配置切入。
Spring--laobai1的更多相关文章
- 基于spring注解AOP的异常处理
一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...
- 玩转spring boot——快速开始
开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...
- Spring基于AOP的事务管理
Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...
- [Spring]IoC容器之进击的注解
先啰嗦两句: 第一次在博客园使用markdown编辑,感觉渲染样式差强人意,还是github的样式比较顺眼. 概述 Spring2.5 引入了注解. 于是,一个问题产生了:使用注解方式注入 JavaB ...
- 学习AOP之透过Spring的Ioc理解Advisor
花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...
- 学习AOP之深入一点Spring Aop
上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...
- 学习AOP之认识一下Spring AOP
心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...
- Spring之旅(2)
Spring简化Java的下一个理念:基于切面的声明式编程 3.应用切面 依赖注入的目的是让相互协作的组件保持松散耦合:而AOP编程允许你把遍布应用各处的功能分离出来形成可重用的组件. AOP面向切面 ...
- Spring之旅
Java使得以模块化构建复杂应用系统成为可能,它为Applet而来,但为组件化而留. Spring是一个开源的框架,最早由Rod Johnson创建.Spring是为了解决企业级应用开发的复杂性而创建 ...
随机推荐
- c#类库和可移值类库的区别
所谓类库,只能指定一个类库的可运行平台. 而可移值类库,可以在无需修改代码的情况,同时可以在多平台上运行DLL文件.多平台如NET Framework.Silverlight.Windows Phon ...
- java中的注解
注解为程序提供信息,但不是程序本身的组成部分.注解有以下用途: * 为编译器提供信息,相当于C语言中的预编译指令 * 部署时处理,软件工具可以根据注解来生成代码,XML文件等,例如编写servlet, ...
- vijos-1003等价表达式
明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的要求是判断选项中哪些代数表达式是和 ...
- IE6下margin时,float浮动产生双倍边距
今天遇到了一个IE6下的兼容性问题,虽然IE6已经不被大众所期待了,用户也已基本上消失的所剩无几,但是,作为一个问题而存在,我们有必要尝试的去研究一下bug的改善方法 对元素float-left,然后 ...
- 简单解释CDATA
在网页源代码中,经常会看见如下代码: <![CDATA[其他内容]]>,其中其他内容一般是脚本. 为什么要用这个标签? 这个标签的意思是Character-Data,即字符数据. 目的,告 ...
- Java微信公众号开发-外网映射工具配置
一.开发环境准备 1.一个微信公众号 2.外网映射工具(开发调试)如花生壳.ngrok工具 注:与微信对接的URL要具备以下条件a:在公网上能够访问 b:端口只支持80端口 这里使用ngrok.cc: ...
- Linux运维人员共用root帐户权限审计
Linux运维人员共用root帐户权限审计 2016-11-02 运维部落 一.应用场景 在中小型企业,公司不同运维人员基本都是以root 账户进行服务器的登陆管理,缺少了账户权限审计制度.不出问题还 ...
- 网络流HDU 2883
建图 源点 -> 每个人 -> 每段时间 -> 汇点 时间要离散化一下 分成一些时间段 权 ...
- 常用免费的WebService列表
天气预报Web服务,数据来源于中国气象局 Endpoint : http://www.webxml.com.cn/WebServices/WeatherWebService.asmx Disc ...
- Http 和TCP的关系,TCP长连接和短连接有什么区别?
HTTP 协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用.由于HTTP在 ...