Spring实战读书笔记
Spring-core
Spring之旅 - DI 和 AOP 概念
Spring的核心策略
容纳你的Bean
Bean的生命周期
装配Bean - 拼装应用组件
Spring 配置的可选方案
高级装配
环境与profile
处理自动化装配歧义性
Bean作用域
默认情况下所有的bean都是单例注入的,Spring定义了多种作用域
使用@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
>* Singleton
>* Prototype 每次注入或者获取都会获得一个新的实例
>* Session 每个会话创建一个bean实例
> 使用proxyMode(作用域代理)来生成代理 实现懒加载 并且 注入真正会话对应的 Bean
>* Request 在Web应用中每个请求创建一个实例
使用XML配置作用域(了解)
运行时值注入
属性占位符 和 SqEL。
面向切面 - 如何使用AOP解耦
软件开发中很多应用被称为横切关注点,AOP实现横切关注点和业务逻辑代码的分离。
什么是面向切面编程
切面实现了横切关注点的模块化,使得每个关注点都集中在一个地方,其次,服务模块只包含核心功能代码,次要代码被转移到切面中。
AOP术语
- pointcut 通知定义了切面的“什么”和“何时”的话,那么切点就定义了“何处”
- joinpoint 连接点是在应用执行过程中能够插入切面的一个点,调用切点的时机。
- Spring对AOP的支持
通过代理类封装目标类,拦截调用目标类的消息。直到真正需要被代理的bean的时候,Spring才创建代理对象。
通过切点来选择连接点
使用注解创建切面
@Aspect
public class Audience{
@Pointcut("execution(* concert.Performance.perform(..))")
public void performance(){}
@Around("performance()")
public void watchPerformance(ProceedingJoinPoint jp){
try{
System.out.println("Silencing cell phones");
jp.proceed();
System.out.println("CLAP");
}
catch(Throwable e){
System.out.println("Demanding a refund");
}
}
}
@PointCut("performacne()" + "&& args(trackNumber)")
public void trackPlayed(int trackNumber);