一:Spring概念介绍
下载Spring框架 spring-framework-4.0.4.RELEASE-dist,4.0.4版官方地址为 http://repo.springsource.org/libs-release-local/org/springframework/spring/4.0.4.RELEASE/ (如果觉得太慢也可以去国内网站下载)
此外,还需要下载一个必要组件commons-logging-1.1.3-bin ,可以在http://commons.apache.org/官网下载也可以在国内网站下载。
1:Spring的核心:
(1)IOC(控制反转):
比如以前:有一个类,在类里面有一个方法(不是static方法),调用类里面的方法就要创建类的对象,使用对象调用方法,创建类对象的过程,对象需要new出来;
Spring:对象的创建不是通过new方式实现,而是交给Spring配置创建类的对象
(2)AOP(面向切面):面向切面编程,扩展功能不是修改源代码实现
2:Spring的优点:
(1)高内聚低耦合,Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护
(2)声明式事务的支持:只需在配置文件声明就可使用事务,无需手动编写代码
3:Spring是一站式框架
(1)Spring在JavaEE三层架构中,每一层都提供不同的解决技术
- web层:SpringMVC
- service层:Spring的ioc
- dao层,Spring 的jdbcTemplate
二:Spring的ioc底层原理
1:把对象的创建交给Spring进行管理
2:ioc操作部分
(1)ioc的配置文件方式
(2)ioc的注解方式
(3)ioc底层原理
1:底层实用技术:
(1)xml配置文件
(2)dom4j解决xml
(3)工厂设计模式
(4)反射
2:原理图
发展过程(图一)
ioc最终原理图(图二)
三:ioc入门案例
第一步:导入jar包
(1)导入最基本的包
(2)导入输入日志的jar包和一个必要的组件
第二步:创建类,在类里面创建方法
第三步:创建Spring配置文件,配置创建类
(1)Spring核心配置文件名称和位置不是固定的
(2)引入schema约束
下载的框架里面找xsd-config.html 文件打开 路径:spring-framework-4.0.4.RELEASE\docs\spring-framework-reference\html\xsd-config.html
在页面最后
(3)配置对象创建
第四步:写代码测试对象创建
四:Spring的bean管理(配置文件xml方式)
在Spring里面通过配置文件创建对象
(1)bean实例化的三种方式
1:使用类的无参数构造创建(重点)
类里面没有无参数构造,会抛异常
2:静态工厂创建对象(很少用,麻烦)
这里的class写的是工厂(Bean2Factory)的全路径;factory-mothod 写工厂里面的方法
3:实例工厂创建对象(很少用,麻烦)
(2)bean标签的常用属性
1:id属性:起名称,id属性名称任意命名
- id属性值,不能包含特殊符号
- 根据id值得到配置对象
2:class:创建对象所在了的全路径
3:name:跟id的作用是一样的,但是name属性可以包含特殊符号
4:scope(范围)属性 ,写在bean标签里面 ,例如:
- singleton :默认值,单例的(对象只会创建一次)
- prototype :多例的(每次创建对象都是一个新的对象)
- request :创建对象放到request域里面
- session : 创建对象放到session域里面
- globalSession(全局Session):创建对象放到globalSession域里面
(3)属性注入方式介绍
属性注入:创建对象的时候,向对象属性里面设置值,就叫做属性注入
1:属性注入的三种方式
(1) - 使用属性的set方法
(2) - 用有参构造注入
(3) - 使用接口方式注入(很少用)
在Spring中,只支持set方法注入和有参构造注入
(4)Spring注入属性(有参构造和set方法)
1:有参构造
xml配置,name填类的属性,value填设置的值
2:set方法
(5)Spring注入对象类型属性(重点)
1:创建service类和dao类
- 在service得到dao对象
2:具体实现过程
- 在service里面把dao作为类型属性
- 生成dao类型属性的set方法
3:在配置文件中完成注入
ref属性填写注入的对象
4:测试代码
(6)p名称空间注入(很少用)
1:引 入p名称空间
p:类里面的属性名="填入值" ;例如:p:pname="lucy"
(7)Spring注入复杂数据 (很少用)
- 写类代码
(8)IOC和DI的区别
1:IOC:控制反转,把对象的创建交给Spring进行配置
2:DI:依赖注入,向类里面的属性中设置值
3:关系:DI(依赖注入)不能单独存在,需要在IOC的基础上完成操作
(9)Spring整合web项目原理
(1)加载Spring核心配置文件
①:new对象,功能可以实现,效率很低
(2)实现思想:把加载配置文件和创建对象的过程,在服务器启动时完成
(3)实现原理:
①:ServletContext对象
②:监听器
③:具体使用
- 在服务器启动时,为每个项目创建一个ServletContext对象
- 在ServletContext对象创建时,使用监听器可以具体到ServletContext对象在什么时候创建
- 使用监听器监听到ServletContext对象创建时,加载Spring配置文件,把配置文件配置对象创建
- 把创建的出来的对象放到ServletContext域对象里面(serAttribute方法)
- 获取对象时候,到ServletContext域得到(getAttribute方法)
(10)Spring整合web项目演示
(1)导入Spring整合web项目jar包
(2)在web.xml配置文件里面配置监听器
(3)指定加载Spring配置文件位置(如果不指定配置文件,就会报错)
五:Spring的bean管理(注解方式)
注解:代码里面特殊的标记,使用注解可以完成功能
注解写法:@注解名称(属性名称-属性值)
注解使用在类上面,方法上面,属性上面
1:Spring注解开发准备
(1)导入基本的jar包
(2)导入aop的jar包
(3):创建Spring配置文件,引入约束
(1)做ioc只需引入约束beans,但是做Spring的ioc注解开发,需要引入新的约束
约束路径:spring-framework-4.0.4.RELEASE\docs\spring-framework-reference\html\xsd-config.html
(4):配置文件中开启注解扫描
2:注解创建对象
3:四种注解方式
Spring 中提供@Component的三个衍生注释:
@Controller web层
@Service 业务层
@Repository 持久层
四种方式功能是一样的,Spring是为了方便以后扩展功能
(1) @Controller
(2) @Service
其他都是一样的方式,其中 value= 可以省略直接写冒号里面的
(3) @Repository
(4) @Component
4:创建对象单实例还是多实例
5:注解注入属性
* 创建service类 和 dao类
对象注入的两种注解方式
第一种是 @Autowired 在下面创建serivce里面有例子
第二种是 @Resource(name="xxxx") name属性值是写创建dao对象的注释的value值,也就是需要制定注入哪一个对象
* 创建service
* 创建dao类
* 测试代码
6:注释和配置文件混合使用
- 创建service类和dao类并注入属性,注入方式使用的是注解的方式
- 将对象的创建交给配置文件
- 测试
7:AOP原理
(1) AOP概述
AOP:面向切面(方面)编程,扩展功能不修改源代码实现
AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码
(2)AOP底层原理
(3)AOP操作相关术语
1:Joinpoint(连接点):类里面的那些方法可以被增强,这些方法称为连接点
2:Pointcut(切入点)重点:在类里面可以有很多的方法被增强,比如实际操作中,只是增强了类里面add方法和update方法,实际增强的方法称为 切入点
3:Advice(通知/增强):增强的逻辑,称为增强,比如扩展日志功能,这个日志功能称为增强,
前置通知:在方法之前执行
后置通知:在方法之后执行
异常通知:方法出现异常
最终通知:在后置之后执行
环绕通知:在方法之前和之后执行
4:切面:把增强应用到具体方法上面,过程称为切面
把增强用到切入点的过程
没那么重要的术语
5:Introduction(引介):动态添加功能或者属性
6:Target(目标对象):代理的目标对象(要增强的类)
7:Weaving(织入):是把增强应用到目标的过程
把advice 应用到target的过程
8:Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类
8:使用表达式配置切入点
(1):切入点:实际增强的方法
(2):常用的表达式
execution(<访问修饰符public,private,...>?<返回类型><方法名>(<参数>)<异常>)
1:例如:execution(* net.kuniu.controller.UserDao.text(传参))
表示的是:增强net.kuniu.controller.UserDao 里面的test() 方法
2:execution(* net.kuniu.controller.UserDao.*(传参))
表示的是:增强net.kuniu.controller.UserDao 里面的所有方法
3:execution(* *.*(传参))
表示的是:增强所有类的所有方法;
4:execution(* abc*(传参))
表示的是:匹配所有abc开头的方法进行增强;
9:Spring的AOP操作
1:在Spring里面进行AOP操作,使用aspectj实现对AOP的操作
(1):Aspectj是一个面向切面的框架
(2):Spring2.0以后新增了对AspectJ的支持
2:使用AspectJ实现AOP有两种方式
(1)基于aspectj的xml配置
(2)基于aspectj的注解方式
3:AOP操作准备
(1)除了导入最基本的jar包,还需要导入AOP相关的jar包
(2)创建一个Spring的核心配置文件,导入约束
约束路径:spring-framework-4.0.4.RELEASE\docs\spring-framework-reference\html\xsd-config.html
打开网页,找到 AOP相关的约束
4:AOP操作
10:Log4j介绍
1:通过log4j可以看到程序运行的过程中更详细的信息
(1)经常使用Log4j查看日志
2:Log4j的使用
(1)导入log4j的jar包
(2)复制Log4j的配置文件,到src下面
3:可以设置日志级别
(1)info:看到基本信息
(2)debug:看到更详细的信息
11:Spring整合web项目演示