spring
2019-03-04 13:31:35 5 举报
AI智能生成
spring思维导图
作者其他创作
大纲/内容
spring
核心
Beans
生命周期
装配
基于xml(手动装配)
装配bean
通过全限定类名(默认构造)
通过工厂方法
静态工厂
工厂
配置
实例工厂
装配bean属性
通过setter方法
通过构造器
根据名称name
<bean id=\"user\" class=\"com.soft.pojo.User\" > <constructor-arg name=\"username\" value=\"张三\"></constructor-arg> <constructor-arg name=\"age\" value=\"18\"></constructor-arg>\t</bean>
根据类型type和索引index
<!-- index :参数的索引号,从0开始 如果只有索引,匹配到了多个构造方法时,默认使用第一个。 type :确定参数类型 \t-->\t<bean id=\"user\" class=\"com.soft.pojo.User\" > <constructor-arg index=\"0\" type=\"java.lang.String\" value=\"李四\"></constructor-arg> <constructor-arg index=\"1\" type=\"java.lang.Integer\" value=\"28\"></constructor-arg>\t</bean>
基于注解(自动装配)
添加注解扫描
<context:component-scan base-package=\"要扫描的包\"></context:component-scan>
Context(上下文)
BeanFactory(工厂)
BeanFactory是Spring的心脏,以Factory结尾,表示它是一个工厂类(接口), 它负责生产和管理bean的一个工厂。在Spring中,BeanFactory是IOC容器的核心接口依赖。所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。它的职责包括:实例化、配置和管理 Bean及建立这些对象间的依赖。
ApplicationContext(应用上下文)
两者区别
Core
IOC
概念
Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制
深入分析
谁控制谁?
当然是IoC 容器控制了对象
控制了什么?
主要控制了外部资源获取(不只是对象包括比如文件等)
哪些方面反转了?
依赖对象的获取被反转了
与直接new的区别
正转
传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转
反转
而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转
优缺点
优点
缺点
图例说明
传统方式(new)
ioc方式
DI
DI—Dependency Injection,即“依赖注入”:组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。 通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。
谁依赖于谁?
当然是应用程序依赖于IoC容器
为什么需要依赖?
应用程序需要IoC容器来提供对象需要的外部资源
谁注入谁?
很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象
注入了什么?
就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)
注入方式
手动装配
属性注入
构造方法注入
自动装配
注解注入
AOP
AOP原理
AOP术语
target(目标类)
需要被代理的类。例如:UserService
Joinpoint(连接点)
所谓连接点是指那些可能被拦截到的方法。例如:所有的方法
PointCut (切入点)
已经被增强的连接点。例如:addUser()
advice(通知/增强)
增强代码。例如:after、before
Weaving(织入)
是指把增强advice应用到目标对象target来创建新的代理对象proxy的过程
proxy(代理类)
底层是动态代理技术
JDK动态代理(基于接口)
cglib动态代理(基于类)
Aspect(切面)
是切入点pointcut和通知advice的结合(一个线是一个特殊的面。一个切入点和一个通知,组成成一个特殊的面。)
其他
切面类型
一般切面
切点切面
切入点表达式(Aspectj)
增强方式
前置
后置
环绕
异常抛出
引入
DAO
JDBC
传统JDBC
Spring JDBC
数据源连接池
JNDI
DBCP
C3P0
alibaba
编程式事务
spring 提供用于操作JDBC工具类JdbcTemplate,类似:DBUtils 依赖连接池DataSource(数据源)
声明式事务
3个顶级接口
PlatformTransactionManager 平台事务管理器,spring要管理事务,必须使用事务管理器 进行事务配置时,必须配置事务管理器
TransactionDefinition:事务详情(事务定义、事务属性),spring用于确定事务具体详情, 例如:隔离级别、是否只读、超时时间等。 进行事务配置时,必须配置事务详情
ransactionStatus:事务状态,spring用于记录当前事务运行状态。事务管理器 通过“事务详情”,获得“事务状态”,从而管理事务
事务配置
基于xml配置(在spring xml 配置aop 自动生成代理,进行事务的管理)
配置事务管理器
<!-- 配置事务管理器 --><bean id=\"txManager\" class=\"org.springframework.jdbc.datasource.DataSourceTransactionManager\"> <!-- 引用数据库连接池 --> <property name=\"dataSource\" ref=\"dataSource\"></property></bean>
配置事务详情
<!-- 2.配置事务详情 <tx:attributes> 用于配置事务详情(属性属性) <tx:method name=\"\"/> 详情具体配置 propagation 传播行为 REQUIRED:必须;REQUIRES_NEW:必须是新的 isolation 隔离级别\t-->\t<tx:advice id=\"txAdvice\" transaction-manager=\"txManager\"> <tx:attributes> <tx:method name=\"transfer\" propagation=\"REQUIRED\" isolation=\"DEFAULT\"/> </tx:attributes>\t</tx:advice>
配置aop
基于注解配置
配置事务管理器,将并事务管理器交予spring
<!-- 1. 事务管理器 -->\t<bean id=\"txManager\" class=\"org.springframework.jdbc.datasource.DataSourceTransactionManager\"> <property name=\"dataSource\" ref=\"dataSource\"></property>\t</bean>
在目标类或目标方法添加注解即可 @Transactional
业务层添加注解
@Transactional\tpublic class ServiceImpl implements Service {
WEB
Web上下文模块建立在应用程序上下文模块之上,为基于web的应用程序提供了上下文。所以Spring框架支持与Struts集成,web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
MVC
0 条评论
下一页