Resource定位 -> 载入 -> 注册
- spring注册对象管理信息方式:
- 直接编码方式:
- 配置文件方式:
- 元数据方式:
- BeanFactory注册对象与依赖绑定方式:
- 直接编码方式
- 外部配置文件方式:1) Properties配置 2) XML配置
- 注解方式
- Spring生命周期
- 1)spring对bean进行实例化,默认bean是单例
- 2)spring对bean进行依赖注入
- 3)如果bean实现了BeanNameAware接口,spring将bean的id传给setBeanName()方法
- 4)如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory方法,将BeanFactory实例传进来
- 5)如果bean实现了ApplicationContextAware()接口,spring将调用setApplicationContext()方法将应用上下文的引用传入
- 6)如果bean实现了BeanPostProcessor接口,spring将调用它们的postProcessBeforeInitialization接口方法
- 7)如果bean实现了InitializingBean接口,spring将调用它们的afterPropertiesSet接口方法,类似的如果bean使用了
init-method属性声明了初始化方法,改方法也会被调用 - 8)如果bean实现了BeanPostProcessor接口,spring将调用它们的postProcessAfterInitialization接口方法
- 9)此时bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用上下文被销毁
- 10)若bean实现了DisposableBean接口,spring将调用它的distroy()接口方法。同样的,如果bean使用了destroy-method属性
- 静态AOP:
- 动态AOP:
- 动态代理:
- 动态字节码增强:
- java代码生成:
- 自定义类加载器:
- AOL扩展:
- 方法调用
- 方法调用执行
- 构造方法调用
- 构造方法执行
- 字段设置: 如setter
- 字段获取: 如getter
- 异常处理执行
- 类初始化: 如static{}代码块
- 代表的是Joinpoint的表述方式,将横切逻辑织入当前系统过程中需要参照Pointcut规定的Joinpoint信息, 才能知道往系统哪些Joinpoint上织入横切逻辑
- 表述方式 - 直接指定Joinpoint所在方法名称 - 正则表达式:Spring AOP, JBoss AOP都支持 - 使用特定的Poincut表述语言
- Before Advice
是在指定的Joinpoint位置之前执行,不会中断执行(可通过抛出异常中断执行) - After Advice - After Returning Advice: 当Joinpoint流程执行完成后执行Advice - After Throwing Advice(Throws Advice): 当Joinpoint抛出异常后执行 - After Advice(Finally Advice): 无论Joinpoint是否正常执行还是抛出异常最终都会执行,如finally{}
- Around Advice: 可以在Joinpoint执行之前和之后都能执行
AspectJ的织入器是其专门的编译器ajc,JBoss AOP是通过其类加载器,Spring AOP是通过ProxyFactory
- Spring AOP是使用JDK动态代理(当实现一个接口时)和CGLIB动态代理(一个普通类时)、用java做为AOP的实现语言(AOL)
- BeforeAdvice
- ThrowsAdvice
- AfterReturningAdvice
- AroundAdvice
- DefaultPointcutAdvisor
- NameMatchMethodPointcutAdvisor
- RegexpMatchMethodPointcutAdvisor
- DefaultBeanFactoryPointcutAdvisor
- REQUIRED:如果存在一个事物,则支持当前事物。如果没有则新建
- MANDATORY:支持当前事物,如果没有当前事物则抛出异常
- NEVER:以非事物方式执行,如果当前存在事物则抛出异常
- NOT_SUPPORTED:以非事物方式执行,如果当前存在事物则将当前事物挂起
- REQUIRES_NEW:新建事物,如果当前存在事物,则将当前事物挂起
- SUPPORTS:支持当前事物,如果当前没有事物,则以非事物方式执行
- NESTED:支持当前事物,新增savepoint,与当前事物提交或回滚