导图社区 Spring 框架 作用解耦
spring框架学习要点 包括IOC和AOP两大核心 xml配置文件和注解两种开发要点
编辑于2019-06-29 09:05:46Spring 框架 作用解耦
spring是轻量级的开源的框架主要作用是解耦
API 1 BeanFactory 顶层接口 默认所有对象按需加载 获取时才创建 2 ApplicationContext (BeanFactory的子接口)只能判断 单例对象直接创建 多例按需 3 ClassPathXmlApplicationContext 类路径下加载配置文件 4 FileSystemXmlApplicationContext 磁盘文件系统加载配置文件 5 AnnotationConfigApplicationContext 注解开发 可以加载配置类 @Configuration 6 WebApplicationContext Spring 整合web项目使用的容器对象
核心
IOC控制反转 用来管理Bean
对象(Bean)的创建 三种方式
XML
无参构造 <bean class=""> 静态工厂 <bean class="" factory-method=""> 实例工厂 <bean factory-bean="容器中已有bean的ID" factory-method="">
注解
@Component 适用所有类上 @Controller web层 @Service Service层 @Repository 持久层 @Bean(方法上返回Bean放入容器)
无参构造
静态工厂
实例工厂
对象的管理 作用范围和生命周期
注解
@Scope("prototype") spring默认是单例的 @PostConstruct (init) @PreDestroy (destroy)
xml
<bean id="" scope="singleton" class=
作用范围
singleton 单例(单例模式)
容器创建对象就创建 容器在对象就在 容器销毁对象销毁
prototype 多例(原型模式)
调对象时创建(如 getBean()) 还在被使用对象就在 长时间不用就GC
request 放入request域
session 放入session域
global-session 集群环境
生命周期
初始化方法 init-method
销毁方法 destroy-method
只对单例有效 多例由GC管理
对象之间的关系DI 依赖注入
xml
在<bean>标签中使用如下标签 构造器器注入 <construct-arg> set方法注入 <property name="" value/ref>
注解
对象属性注入 @Autowired 如果允许为空 需要设置required=false @Qualifier 可以根据名称注入 @Resource 相当于上两个一起 普通属性注入 @Value
构造器注入
set方法注入
接口注入
AOP面向切面编程
概念: 通过预编译和运行期动态代理 在不该目标代码的情况下 抽取横切关注点 实现功能的统一维护(统一增强)是oop的补充 使业务逻辑各个部分解耦(日志事务和业务的分离) 提高重用率和效率 方便维护
专业术语
Target 目标 需要增强的类
JoinPoint 连接点 target中可以被增强的方法
Pointcut 切点 当前需要增强的方法
Advice 通知 增强代码
Aspect 切面 Advice和Pointcut组成切面 切点表达式和通知代码组成切面类
Weaving 织入 配置切面生成代理对象的过程
Proxy 代理 生成的代理对象
底层实现 动态代理
jdk动态代理 基于接口
cglib动态代理 基于父类
切面类中注解配置 或xml文件bean中配置 增强种类 1 前置通知 before 2 后置通知 after-returning 3 异常通知 afterThrowing 4 最终通知 after 使用注解有小bug 会在后置异常前 5 环绕通知 around 切入点表达式 修饰符 返回值类型 包名类名 方法名(参数列表) execution([修饰符]返回值类型 包名.类名.方法名(参数)) *.com.itheima.service.impl.*.*(..)
xml开发步骤
1 导包 2 编写增强类 3 将增强类交给Spring管理 4 配置织入 <aop:config> <aop:aspect> 切点表达式抽取 <pointcut id="p1" expression="execution()"> <aop:before advice-ref="" pointcut-ref="p1"> <aop:afterReturning ......
注解开发
@Aspect 标注当前类是一个切面类
@Before @AfterReturning @Around @AfterThrowing @After
切点表达式抽取 @Pointcut("execution(* com.itheima.anno.*.*(..))") public void pointcut11(){} 使用 @After("pointcut11()")
Spring提供的事务控制
注解
注解开发配置要点 1 xml配置事务管理器 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSou rceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> 2 xml开启注解驱动 <tx:annotation-driven transaction-manager="transactionManager"/> 3 使用@Transactional
xml
xml开发 配置 要点 1平台事务管理器的配置 2事务通知的配置 3切入点表达式 4事务的属性 5事务aop织入的配置
编程式事务控制 自己写代码控制事务 基于xml的声明式事务控制 xml配置控制事务 基于注解的声明式事务控制 注解控制事务
Spring 新注解
Spring 新注解 还可以使用注解代替下列标签 @Configuration 指定当前类是一个Spring配置类 取代配置类 @ComponentScan 扫描 @Bean 用在方法上 将返回值放到Spring容器 @PropertySource 加载 .properties文件中的配置 @Import 导入其他配置类
Spring 整合junit
集成步骤 导坐标 替换main 指定配置文件或类 Autowired注入属性 测试 1 导入 spring_springMVC_mybatis.spring 集成junit的坐标 2 使用@Runwith注解替换原来的运行期 替代 main 方法 3 使用@ContextConfiguration指定配置文件 4 使用@Autowired注入属性 5 创建测试方法进行测试