spring
2019-03-04 13:31:35 5 举报
AI智能生成
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>
</bean>
<constructor-arg name="username" value="张三"></constructor-arg>
<constructor-arg name="age" value="18"></constructor-arg>
</bean>
根据类型type和索引index
<!--
index :参数的索引号,从0开始 如果只有索引,匹配到了多个构造方法时,默认使用第一个。
type :确定参数类型
-->
<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>
</bean>
index :参数的索引号,从0开始 如果只有索引,匹配到了多个构造方法时,默认使用第一个。
type :确定参数类型
-->
<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>
</bean>
基于注解(自动装配)
添加注解扫描
<context:component-scan base-package="要扫描的包"></context:component-scan>
装配bean
装配bean属性
Context(上下文)
BeanFactory(工厂)
BeanFactory是Spring的心脏,以Factory结尾,表示它是一个工厂类(接口), 它负责生产和管理bean的一个工厂。在Spring中,BeanFactory是IOC容器的核心接口依赖。所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。它的职责包括:实例化、配置和管理 Bean及建立这些对象间的依赖。
ApplicationContext(应用上下文)
如果说BeanFactory是Spring的心脏,那么ApplicationContext就是完整的躯体了,ApplicationContext由BeanFactory派生而来,是IOC容器另一个重要接口,它继承了BeanFactory的基本功能,提供了更多面向实际应用的功能。在BeanFactory中,很多功能需要以编程的方式实现,而在ApplicationContext中则可以通过配置实现。
BeanFactorty接口提供了配置框架及基本功能,但是无法支持spring的aop功能和web应用。而ApplicationContext接口作为BeanFactory的派生,因而提供BeanFactory所有的功能。而且ApplicationContext还在功能上做了扩展
BeanFactorty接口提供了配置框架及基本功能,但是无法支持spring的aop功能和web应用。而ApplicationContext接口作为BeanFactory的派生,因而提供BeanFactory所有的功能。而且ApplicationContext还在功能上做了扩展
两者区别
Core
IOC
概念
Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制
深入分析
谁控制谁?
当然是IoC 容器控制了对象
控制了什么?
主要控制了外部资源获取(不只是对象包括比如文件等)
哪些方面反转了?
依赖对象的获取被反转了
与直接new的区别
正转
传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转
反转
而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转
优缺点
优点
组件之间解耦,提高其灵活性和可维护性
缺点
因为对象的生成是用反射,所以在效率上会有些损耗,不过比起其优点来说这是微不足道的
图例说明
传统方式(new)
ioc方式
DI
概念
DI—Dependency Injection,即“依赖注入”:组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。
通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。
通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。
深入分析
谁依赖于谁?
当然是应用程序依赖于IoC容器
为什么需要依赖?
应用程序需要IoC容器来提供对象需要的外部资源
谁注入谁?
很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象
注入了什么?
就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)
注入方式
手动装配
属性注入
构造方法注入
自动装配
注解注入
AOP
AOP原理
AOP其实就是OOP(Object-Oriented Programing,面向对象编程)的补充和完善,它和OOP一样是一种编程思想。
它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect"。
使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。
简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度。
它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect"。
使用“横切”技术,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>
<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 隔离级别
-->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="transfer" propagation="REQUIRED" isolation="DEFAULT"/>
</tx:attributes>
</tx:advice>
<tx:attributes> 用于配置事务详情(属性属性)
<tx:method name=""/> 详情具体配置
propagation 传播行为 REQUIRED:必须;REQUIRES_NEW:必须是新的
isolation 隔离级别
-->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="transfer" propagation="REQUIRED" isolation="DEFAULT"/>
</tx:attributes>
</tx:advice>
配置aop
<!-- 3.AOP编程切入点表达式 确定增强的连接器,拦截哪些方法>
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.soft.service..*.*(..))"/>
</aop:config>
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.soft.service..*.*(..))"/>
</aop:config>
基于注解配置
配置事务管理器,将并事务管理器交予spring
<!-- 1. 事务管理器 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
在目标类或目标方法添加注解即可 @Transactional
<!-- 2.开启以注解的方式实现事务控制,将管理器交予spring
* transaction-manager 配置事务管理器
* proxy-target-class
true : 底层强制使用cglib 代理
-->
<tx:annotation-driven transaction-manager="txManager"/>
* transaction-manager 配置事务管理器
* proxy-target-class
true : 底层强制使用cglib 代理
-->
<tx:annotation-driven transaction-manager="txManager"/>
业务层添加注解
@Transactional
public class ServiceImpl implements Service {
public class ServiceImpl implements Service {
WEB
Web上下文模块建立在应用程序上下文模块之上,为基于web的应用程序提供了上下文。所以Spring框架支持与Struts集成,web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
MVC
0 条评论
下一页