Spring4.x学习知识要点day01
Spring知识要点:
<!-- Spring概念:1、Spring是开源的轻量级框架(所谓轻量级框架是看它启动时是否需要消耗太多资源,
对于Spring容器,它提供了很多服务,但这些服务并不是默认为应用打开的,应用需要某种服务,还需要指明使用该服务,
如果应用使用的服务很少,如:只使用了spring核心服务,那么我们可以认为此时应用属于轻量级的,如果应用使用了spring提供的
大部分服务,这时应用就属于重量级。目前EJB容器就因为它默认为应用提供了EJB规范中所有的功能,所以它属于重量级。)
2、Spring是一站式框架(所谓一站式框架是指可以通过该框架完成一个web项目的所有功能) -->
<!-- 以启动程序所需的资源来决定。
轻量级框架:侧重于减小开发的复杂度,相应处理能力减弱。但是其创建和销毁不需要消耗太多的资源,
意味着可以在程序中经常创建和销毁session对象。例如spring。
重量级框架:强调高可伸缩性。例如EJB在启动的时候,需要消耗大量的资源、内存和CPU等。
你不能随意的创建和销毁它的实例,因为会占用很多的资源。 -->
1 spring是开源的轻量级框架
2 spring核心主要两部分
(1)aop:面向切面编程,扩展功能不是修改源代码实现
(2)ioc:控制反转,
- 比如有一个类,在类里面有方法(不是静态的方法),调用类里面的方法,创建类的对象,使用对象调用方法,创建类对象的过程,需要new出来对象
- 把对象的创建不是通过new方式实现,而是交给spring配置创建类对象
3 spring是一站式框架
(1)spring在javaee三层结构中,每一层都提供不同的解决技术
- web层:springMVC
- service层:spring的ioc
- dao层:spring的jdbcTemplate
Spring ioc 操作
1 把对象的创建交给spring进行管理
2 ioc操作两部分:(1)ioc的配置文件方式 (2)ioc的注解方式
IOC底层原理
1 IOC底层原理技术:(1)xml配置文件 (2)dom4j解析xml (3)工厂设计模式 (4)反射
画图分析IOC底层原理
IOC入门案例
第一步 导入jar包
(1)解压资料zip文件
Jar特点:都有三个jar包
(2)做spring最基本功能时候,导入四个核心的jar包就可以了
(3)导入支持日志输出的jar包
第二步 创建类,在类里面创建方法
第三步 创建spring配置文件,配置创建类
(1)spring核心配置文件名称和位置不是固定的
- 建议放到src下面,官方建议applicationContext.xml
(2)引入schema约束
(3)配置对象创建
第四步 写代码测试对象创建
(1)这段代码在测试中使用
Spring的Bean管理
<!-- bean实例化的三种方式
1、使用类的无参的构造创建(最常用)
2、使用静态工厂创建(比较麻烦)
(1)创建静态的方法,返回类对象
public class Bean2Factory {
public static void getBean2() {
return new Bean2();
}
3、使用实例工厂创建
(1)创建不是静态的方法,返回类对象
-->
<!-- Bean实例化的三种方式之一:使用类的无参构造创建 -->
<!-- <bean id="user" class="com.cn.ioc.User"></bean> -->
<!-- 方式二:使用静态工厂创建对象 -->
<!-- <bean id="bean2" class="com.cn.bean.Bean2Factory" factory-method="getBean2"></bean> -->
<!-- 方式三:使用实例工厂创建对象 -->
<!-- 创建工厂对象 -->
<!-- <bean id="bean3Factory" class="com.cn.bean.Bean3Factory"></bean>
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean> -->
属性注入介绍
1 创建对象时候,向类里面属性里面设置值
2 属性注入的方式介绍(三种方式)
(1)使用set方法注入
(2)使用有参数构造注入
(3)使用接口注入
3 在spring框架里面,支持前两种方式
(1)set方法注入(重点)
(2)有参数构造注入
注入对象类型属性(重点)
1 创建service类和dao类
(1)在service得到dao对象
2 具体实现过程
(1)在service里面把dao作为类型属性
(2)生成dao类型属性的set方法
(3)配置文件中注入关系
P名称空间注入
<!-- 引入spring schema约束条件 -->
<!-- p名称空间注入 -->
注入复杂类型属性
1 数组
2 list集合
3 map集合
4 properties类型
1 package com.cn.property; 2 3 import java.util.List; 4 import java.util.Map; 5 import java.util.Properties; 6 7 public class Person { 8 //p名称空间注入 9 private String pname; 10 11 public void setPname(String pname) { 12 this.pname = pname; 13 } 14 public void test1() { 15 System.out.println("person....." + pname); 16 System.out.println("arr:" + arr); 17 System.out.println("list:" + list); 18 System.out.println("map:" + map); 19 System.out.println("properties:" + properties); 20 } 21 //注入复杂类型属性值 22 //数组 23 private String[] arr; 24 //list 25 private List<String> list; 26 //map 27 private Map<String,String> map; 28 //properties 29 private Properties properties; 30 31 public void setArr(String[] arr) { 32 this.arr = arr; 33 } 34 public void setList(List<String> list) { 35 this.list = list; 36 } 37 public void setMap(Map<String, String> map) { 38 this.map = map; 39 } 40 public void setProperties(Properties properties) { 41 this.properties = properties; 42 } 43 44 }
IOC与DI的区别
(1)IOC: 控制反转,把对象创建交给spring进行配置
(2)DI: 依赖注入,向类里面的属性中设置值
(3)关系:依赖注入不能单独存在,需要在ioc基础之上完成操作
Spring整合web项目原理
1 加载spring核心配置文件
(1)new对象,功能可以实现,效率很低
2 实现思想:把加载配置文件和创建对象过程,在服务器启动时候完成
3 实现原理
(1)ServletContext对象
(2)监听器
(3)具体使用:
- 在服务器启动时候,为每个项目创建一个ServletContext对象
- 在ServletContext对象创建时候,使用监听器可以具体到ServletContext对象在什么时候创建
- 使用监听器监听到ServletContext对象创建时候,
-- 加载spring配置文件,把配置文件配置对象创建
-- 把创建出来的对象放到ServletContext域对象里面(setAttribute方法)
- 获取对象时候,到ServletContext域得到 (getAttribute方法)