韩顺平Spring笔记
①spring是什么?
struts 是 web 框架 (jsp/action/actionfrom)
hibernate 是 orm框架,处于持久层.
spring 是容器框架,用于配置bean,并维护bean之间关系的框架
?spring中有一个非常概念: bean (是java中的任何一种对象javabean/service/action/数据源./dao, ioc(控制反转inverse of control) di( dependency injection 依赖注入)
?画一个框架图
快速入门
开发一个spring项目.
1.引入spring的开发包(最小配置该包把常用的jar都包括, 还要写日志包
2.创建spring的一个核心文件 , [hibernate有核心 struts核心文件 ], 该文件一般
放在src目录下,该文件中引入 xsd文件:
可以从给出的案例中拷贝一份.
3.配置bean
4.在中,我们怎么使用
到spring 的applicationContext对象(容器对象)
ApplicationContext ac=new ClassPathXmlApplicationContext("");
UserService us=(UserService) ("userService");
();
5.细节讨论?
传统的方法和使用spring的方法
5.1使用spring ,没有new 对象,我们把创建对象的任务交给spring框架
5.2spring的运行原理图:
我们再看spring
对上面案例总结:
spring实际上是一个容器框架,可以配置各种bean(action/service/domain/dao),并且可以维护bean与bean的关系,当我们需要使用某个bean的时候,我们可以getBean(id),使用即可.
ioc是什么?
答:ioc(inverse of controll ) 控制反转: 所谓控制反转就是把创建对象(bean),和维护对象(bean)的关系的权利从程序中转移到spring的容器,而程序本身不再维护.
DI是什么?
答: di(dependency injection) 依赖注入: 实际上di和ioc是同一个概念,spring设计者认为di更准确表示spring核心技术
?学习框架,最重要的就是学习各个配置.
把Applicationcontext做成一个单例的.
上机练习: 把我写的代码走一遍.
spring开发提倡接口编程,配合di技术可以层与层的解耦
举例说明:
现在我们体验一下spring的di配合接口编程的,完成一个字母大小写转换的案例:
思路:
1.创建一个接口 ChangeLetter
2.两个类实现接口
3.把对象配置到spring容器中
4.使用
通过上面的案例,我们可以初步体会到di配合接口编程,的确可以减少层(web层) 和业务层的耦合度.
思考题:
接口
ValidateUser
有一个方法:
check(??)
有两个类
CheckUser1 implements ValidateUser
{
check
BeanFactory factory = new XmlBeanFactory(
new ClassPathResource("com/hsp/ioc/"));
("student");
结论:
1.如果使用ApplicationContext ,则配置的bean如果是 singlton不管你用不用,都被实例化.(好处就是可以预先加载,缺点就是耗内存)
2.如果是 BeanFactory ,则当你获取beanfacotry时候,配置的bean不会被马上实例化,当你使用的时候,才被实例(好处节约内存,缺点就是速度)
3.规定: 一般没有特殊要求,应当使用ApplicatioContext完成(90%)
bean 的 scope的细节
入门案例:
三种获取ApplicationContext 对象引用的方法
1.ClassPathXmlApplicationContext -> 通过类路径
2.FileSystemXmlApplicationContext -> 通过文件路径
举例:
ApplicationContext ac=new FileSystemXmlApplicationContext("文件路径 / ");
3.XmlWebApplicationContext
bean的生命周期
为什么总是一个生命周期当做一个重点?
Servlet -> servlet生命周期 init() destory()
java对象生命周期.
往往笔试,面试总喜欢问生命周期的问题
①实例化(当我们的程序加载文件),把我们的bean(前提是scope=singleton)实例化到内
存
②调用set方法设置属性
③如果你实现了bean名字关注接口(BeanNameAware) 则,可以通过setBeanName获取id
号
④如果你实现了 bean工厂关注接口,(BeanFactoryAware),则可以获取BeanFactory
⑤如果你实现了 ApplicationContextAware接口,则调用方法
⑥如果bean 和一个后置处理器关联,则会自动去调用Object
postProcessAfterInitialization方法
⑦使用我们的bean
11. 容器关闭
12. 可以通过实现DisposableBean 接口来调用方法 destory
13. 可以在
小结: 我们实际开发中往往,没有用的这么的过程,常见的是:
1->2->6->10->9->11
上机练习: 把使用每个bean的时间记录到一个文件 ,内容是
xxbean. 使用时间是 : 1999-11-11 11:11:11
问题:通过BeanFactory来获取bean对象,bean的生命周期是否和Applicationcontext 是一样吗?
不是一样的,bean是工厂中创建的生命周期会简单一些:
配置bean的细节
① scope 的说明:
?尽量使用 scope=”singleton” ,不要使用prototype,因为这样对我们的性能影响较
大.
②如何给集合类型注入值.
java中主要的集合有几种: map set list / 数组
Department类:
package class Department {
private String name;
private String [] empName;
private List
private Set
private Map
public Set
return empsets;
}
public void setEmpsets(Set
}
public String[] getEmpName() {
return empName;
}
public void setEmpName(String[] empName) {
= empName;
}
public String getName() {
return name;
}
public void setName(String name) {
= name;
}
public List
return empList;
}
public void setEmpList(List
= empList;
}
public Map
return empMaps;
}
public void setEmpMaps(Map
}
}
..Foo”>
③继承配置
public class Student
public class Gradate extends Student
在文件中体现配置
思考: 目前我们都是通过set方式给bean注入值,spring还提供其它的方式注入值,比如通过构造函数注入值!
通过构造函数注入值
关键代码:
自动装配bean的属性值
(1)byName的用法:
原理图:
(2)byType: byType:寻找和属性类型相同的bean,找不到,装不上,找到多个抛异常。
(3)constructor: autowire="constructor"
说明:查找和bean的构造参数一致的一个或
多个bean,若找不到或找到多个,抛异常。按照参数的类型装配
(4) autodetect
说明: autowire="autodetect"
(3)和(2)之间选一个方式。不确定
性的处理与(3)和(2)一致。
(5) defualt
这个需要在
当你在
如果没有在
defualt-autorwire=”no”
(6) no: 不自动装配
使用spring的特殊bean,完成分散配置:
说明: 当通过 context:property-placeholder 引入属性文件的时候,有多个需要使用 , 号间隔.
location="classpath:com/hsp/dispatch/,classpath:com/hsp/dispatch/"/> pwd=tiger aop编程 aop( aspect oriented programming ) 面向切面(方面)编程,是对所有对象或者是一类对象编程,核心是( 在不增加代码的基础上,还增加新功能) 汇编(伪机器指令 mov jump) 面向机器 c语言(面向过程 )->系统软件(操作系统,数据库, 杀毒软件,防火墙,驱动..) 语句1; 语句2; ... java语法(面向对象->类-对象) class Dog{ 属性;->变量 行为->函数 } 面向切面 spring( ->aop) 面向n多对象编程 aop特别提醒: aop编程,实际上在开发框架本身用的多,在实际项目中,用的不是很多,但是将来会越来越多,这个一个趋势. aop原理+案例 编程说明: 步骤: 1.定义接口 2.编写对象(被代理对象=目标对象) 3.编写通知(前置通知目标方法调用前调用) 4.在文件配置 4.1配置被代理对象=目标对象 4.2配置通知 4.3配置代理对象是 ProxyFactoryBean的对象实例 4.3.1 4.3.2织入通知 4.3.3配置被代理对象 后面还后置通知,环绕通知,异常通知,引入通知 上机: 你把老师写的代码看看,走一遍。 提问? 说spring的aop中,当你通过代理对象去实现aop的时候,获取的ProxyFactoryBean 是什么类型? 答: 返回的是一个代理对象,如果目标对象实现了接口,则spring使用jdk 动态代理技术,如果目标对象没有实现接口,则spring使用CGLIB技术. 提一个问题 class A{ private Strinag name; public viod setName(String name){ =name; id=”a” class=”...A”> A a=new A(); (“顺平”); HTML 一、HTML有关知识点 1.html介绍 html是一种标记语言,主要的用途是开发网页,使用html可以展现文字、图片、视频、声音,html是我们web开发(网站开发)。 2.html可以做什么 ?html可以编写静态网页 ?该静态网页可以包括文字、图像、动画、声音、表格、链接。从而构成一个个漂亮的网页 3.Html发展历史 4.Html的基本结构 5.是标记(也叫元素),标记的一般格式: <元素名[属性=“属性值”]>元素内容标签> 如果没有内容可以用:<元素名[属性=“属性值”]/> 6.Html实体标记 7.Html常用标记 ?html超链接 ●_blank 新的窗口 ●_self 本窗口 ●_parent 父窗口 ●_top整个浏览器窗口 ?html图像元素 ?html表格 顺平j2ee系列教程--玩转oracle10g学习笔记 引言: 数据保存问题? 可使用文件保存和数据库保存。 使用文件保存数据存在几个缺点: 1、文本的安全性问题; 2、文件不利于查询和对数据的管理; 3、文件不利于存放海量数据; 4、文件在程序中控制不方便。 为解决数据保存问题,专家们设计出更加利于管理数据的东东--数据库(本质就是一个软件),它能更有效的管理数据。数据库是衡量一个程序员水平的重要指标。 数据库 1、数据库的本质就是一款软件,这个软件专门用于管理和维护数据; 2、数据存放在数据库中。 数据库服务器、数据库和表的关系 所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每个应用创建一个数据库。 为了保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。 数据库服务器、数据库和表的关系如图所示: 为什么选择oracle--性能优越 概述:目前主流数据库包括 微软: sql server和access 瑞典MySql: AB公司mysql ibm公司: db2(处理海量) 美国Sybase公司: Sybase ibm公司: informix 美国oracle公司: oracle 做项目时应当如何选择数据库? 1、标的(项目预算); 2、功能的要求; 3、并发数(多少人用); 4、安全、稳定性。 5、操作系统(unix[solaris,freeBSD,aix,hp unix]/linux/window) oracle数据库的认证 oca(oracle certified associate)初级认证 ocp(oracle certified professional)中级认证 ocm(oracle certified master)高级认证 oracle10g安装步骤: 1、安装文件 2、把10201_database_win32.zip文件copy到没有中文的路径下 3、检查服务选项,确定本机没有安装过oracle数据库,如果有则卸载 4、将压缩包解压后,双击setup.exe文件进行安装。 说明:建议大家自己建立一个文件目录,比如d:/hsporacle/oracle,然后把数据库安装到 第一课 第二课tomcat 简单模拟 package com.my.first; import java.io.*; import https://www.360docs.net/doc/5d8119010.html,.*; publicclass Mytomcat { /** * @param args */ publicstaticvoid main(String[] args) throws Exception { ServerSocketss = new ServerSocket(9999); Socket s = ss.accept(); System.out.println("在9999上等待。。。"); OutputStreamos =s.getOutputStream(); BufferedReaderbr = new BufferedReader(new FileReader("f:\\hello.html")); String str=""; while((str = br.readLine())!=null){ os.write(str.getBytes()); } br.close(); os.close(); s.close(); // ss.close(); } } 在浏览器中输入 http://localhost:9999 就会出现“hello world” 第三课 启动tomcat 各种问题总结 第四课 第五课 虚拟目录 如在f盘存放着各种web应用,但是空间不够了,这是我在d盘弄个文件当做该web应用的文件。但是要在server.xml中指定一下。 步骤:1、在那个磁盘下建立“f:\web2”,并建立相关的资源文件 2、在server.xml中配置 Javascript的基本介绍 ?JS是用于WEB开发的脚本语言: ?脚本语言是什么: ?脚本语言不能独立使用,它和HTML/JSP/PHP/https://www.360docs.net/doc/5d8119010.html,配合使用 ?脚本语言也有自己的变量,函数,控制语句(顺序,分支,循环)?脚本语言实际上是解释性语言(即在执行时直接对源码进行执行)?Java程序.java→.class→jvm , js→浏览器(js引擎来解释执行)?Js在客户端(浏览器)执行 ?因为js是由浏览器来执行的,因此这里有个问题,不同类型的浏览器可能对js的支持不一样。 韩顺平html笔记
?无序列表 --用于说明行 --用于说一小格
?有序列表
?框架 ?表单元素 韩顺平2011玩转oracle10g视频教学课堂笔记(完整版)
韩顺平servlet笔记(个人总结版)
传智播客韩顺平轻松搞定网页设计(html+css+javascript)之javascript
韩顺平html+css+js之JS笔记
韩顺平html+css+js 之JS笔记 Javascript的基本介绍 ?JS是用于WEB开发的脚本语言: ?脚本语言是什么: ?脚本语言不能独立使用,它和HTML/JSP/PHP/https://www.360docs.net/doc/5d8119010.html,配合使用 ?脚本语言也有自己的变量,函数,控制语句(顺序,分支,循环) ?脚本语言实际上是解释性语言(即在执行时直接对源码进行执行) ?Java程序.java→.class→jvm , js→浏览器(js引擎来解释执行) ?Js在客户端(浏览器)执行 ?因为js是由浏览器来执行的,因此这里有个问题,不同类型的浏览器可能对js的支持不一样。
jquery学习笔记-韩顺平
1,Jquery是一个javascript框架或者叫做javascript库; 2,用Ajax我们可以给服务器发送一个请求,服务器可以给我回送一个请求; 3,出现javascript框架的根本原因就是为了提高开发者的开发效率; 4,jquery是一个轻量级的js库(压缩后只有21K),这是其他的js库所不及的,它兼容CSS3,还兼容各种浏览器; 5,JQuery是一个快速的,简洁的javascript库,使用户能更方便的处理HTML document,events,实现动画效果,并且方便的为网站提供AJAX交互; 6,JQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。 7,jquery能够使用户的html页保持代码和html内容的分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可; 8,所谓的库就是提供一些现成的方法供你去调用; 9,当前流行的javascript库有: Jquery ,MooTools,Prototype,Dojo,YUI,EXTJS,DWR[主要是运行在服务器上的]; 10,$(document) //---这个表示一个jquery对象; 11,如果使用jquery,则需要引入jquery库 12,jquery对象就是对dom对象的一系列包装,它包装完成后,就可以使用jquery对象提供的方法来进行操作; 13,在使用jquery开发中,有两种对象,1,jquery对象,2,dom对象,如果是jquery对象则只能使用jquery库提供的方法,如果是dom对象,则只能使用js本身提供的方法; 14,分析jquery库文件的运行原理: