Spring总结
关于Spring
Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件.它是一个全面的,企业应用开发一站式的解决方案,贯穿表现层,业务层,持久层.但是Spring任然可以和其他的框架无缝整合.
Spring的特征
1.控制反转:一个对象依赖的其他对象通过被动的方式传递进来,而不是这个对象自己创建或查找依赖对象,简单说,以前是我们手动把对象new出来,现在这个工作交给了Spring,我们不需要new对象了,只需获取对象即可
2.面向切面:Spring支持面向切面编程,并且把应用业务逻辑和系统服务分开
3.容器:Spring包含并管理对象的配置和生命周期
Spring常用模块
1.核心容器:核心容器提供Spring框架的基本功能.核心容器的主要组件是BeanFactory,它是工厂模式的实现.BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开
2.Spring上下文:Spring上下文是一个配置文件,向Spring框架提供上下文信息.Spring上下文包括企业服务,例如:JNDI,EJB,电子邮件,国际化,校验和调度功能
3.Spring AOP:Spring AOP模块直接将面向切面编程功能集成到了Spring框架中.可以将一些通用的任务,如安全,事务,日志等集中进行管理,提高了复用性和管理的便捷性
4.Spring MVC:MVC框架是一个全功能的构建Web应用程序的MVC实现.MVC容纳了大量视图技术,其中包括JSP,Velocity等
Spring创建对象的三种方式
1.空参构造方法
2.静态工厂创建:有static,可以通过类名直接调用,所以不用创建工厂对象
3.动态工厂:因为没有static,所以需要创建工厂对象
bean元素
bean元素的scope属性:
singleton(默认值):单例对象,被标识为单例的对象,在spring容器中只存在一个实例
prototype:多例原型,被标识为多例的对象,每次在获得的时候才会创建,每次都是新的对象
request:web环境下,对象与request生命周期一致
session:web环境下,对象与session生命周期一致
Spring中bean的属性注入
1.set方法注入:
值类型注入
引用类型注入
2.构造函数注入
3.复杂类型注入
数组类型
List/Set类型
Map类型
Properties类型
在web项目中配置Spring容器
目的:让Web项目在启动的时候就创建Spring容器,我们只需要获取即可,不用创建容器
1.在web.xml中配置:
配置监听器
指定Spring配置文件的位置
2.在Class中获取Spring的容器:从ServletContext中获取
使用注解代替xml配置
1.在applicationContext.xml配置文件中导入新的命名空间(context约束)
2.开启注解代替xml配置:component-scan(自动扫描组件)
3.把user注册到Spring中
4.值类型注入
第一种:通过反射的field赋值,破坏了封装性
第二种:通过set方法赋值(推荐)
5.引用类型注入
1.自动装配
2.手动指定
6.指定初始化方法和销毁方法
Spring和junit整合
目的:创造Spring测试环境
1.导包(4个核心包+2个日志包+aop+test)
2.使用junit创建测试环境
3.进行测试
Spring的AOP简介
面向切面编程思想:横向重复,纵向抽取
Spring的AOP其实就是Sprin能够帮我们生成动态代理对象,Spring实现AOP的方式有两种,动态代理和cglib代理.
1.动态代理:被代理的对象必须实现接口才能被代理,如果没有接口,将不能使用动态代理
2.cglib代理:第三方代理技术,可以对任何类生成代理,代理的原理是对目标对象进行继承代理,如果代理对象被final修饰,则该类无法被cglib代理
Spring中AOP的名词
1.Jointpoint(连接点):目标对象中,所有可以增强的方法
2.Pointcut(切入点):目标对象中,已经增强的方法
3.Advice(通知):增强的代码
4.Target(目标对象):被代理的对象
5.Weaving(织入):将通知织入到切入点的过程叫做织入
6.Proxy(代理):将通知织入到目标对象之后形成的代理对象
7.Aspect(切面):切入点 + 通知
Spring中通知的分类
1.前置通知:方法之前调用
2.后置通知:方法之后调用,如果出现异常不会调用
3.环绕通知:方法之前,之后都调用
4.异常拦截通知:如果出现异常就调用
5.后置通知,方法之后调用,无论是否出现异常都会调用
使用注解完成Spring动态代理
1.开启使用注解完成织入,这个开关一打开,我们就可以在通知对象中配置
2.@Aspect:表示该类是一个通知类
注意:环绕通知比较特殊,需要手动调用一次原方法
3.@Before("execution(* cn.itcast.service.ServiceImpl.(..))"):指定该方法是前置通知,并使用切点表达式指定增强的方法
4.提取切点表达式到一个方法上,方便管理
Spring中的Jdbc
1.导包
4个核心包(core,beans,context,expression)+
2个日志包(logging,log4j)+
spring-test包+
spring-aop(spring-test需要)+
c3p0连接池+
JDBC驱动+
spring-jdbc+
spring-tx(spring的事务包)
2.配置applicationContext.xml
3.把数据库连接信息分离出来,方便管理
db.properties : 数据库连接信息
Spring中的事务
因为在不同的平台,操作事务的代码各不相同,Spring提供了一个接口,PlanformTransactionManager接口
Spring管理事务的方式:
1.编码式(了解) 2.xml配置(重点) 3.注解(重点)
xml配置事务:
1.导入包 4个核心包+
2个日志包+
aop+aspect+aop联盟+weaving织入包(玩aop需要导入的包)
2.applicationContext.xml导入约束
beans:最基本
context:读取properties配置文件
aop:配置aop
tx:配置事务通知
3.在applicationContext.xml中的配置 1.配置管理事务的核心类,这个核心类依赖于数据源,可以使用连接池
2.配置事务的通知,指定被增强的方法所拥有的事务属性,比如:select方法的事务属性是read-only="true",而update方法的事务属性是read-only="false"
3.将通知织入切入点中,配置切点表达式,指定哪些类中的哪些方法需要被代理
注解配置事务:
1.前两步和xml配置一样 2.在applicationContext.xml中开启注解配置事务
3.在需要被增强的方法中配置事务
4.可以把注解加入到需要事务的这个类上,这样这个类中的所有方法都使用这个注解,如果有不同的需求时,在特定方法上加注解进行覆盖