Aop异常的玩法 在 ThrowsAdvice上看到这么一段注释,这段注释给出了异常的一些玩法: * <p>Some examples of valid methods would be: * * <pre class="code">public void afterThrowing(Exception ex)</pre> * <pre class="code">public void afterThrowing(RemoteE…
Aop异常的玩法 在 ThrowsAdvice上看到这么一段注释,这段注释给出了异常的一些玩法: * <p>Some examples of valid methods would be: * * <pre class="code">public void afterThrowing(Exception ex)</pre> * <pre class="code">public void afterThrowing(RemoteE…
Around与 其它通知之间的区别? Around区别于其他的通知,可以认为,除了 Around之外的其它通知都是被动去执行的,而 Around不同,其是需要我们主动去执行的 (结合 ProceedingJoinpoint),若是不显式去调用目标代码的话,那么之后的通知以及对应的目标方法也不会被执行,这也是区别于其它 Advice的地方 为什么 Spring Aop不需要去设计 Around Advice? 从 AspectJ @Around执行上来讲,其是需要和 ProceedingJoinPoint配合执行被代…
对 Aop的些许思考: Aop实际上就是提供了一些横切点,供我们去进行一些插拔式的动作 Aspect实际是就是一些横切点的组织形式,而 Joinpoint其实就是方法执行过程中定义良好的一个点 so,Aspect其实就是定义了一个模块去组织 Joinpoint Pointcut其实就是断言,Pointcut会去匹配 Joinpoint,匹配成功,则进行对应 Advice的执行,即将特定动作的 Advice织入 Joinpoint中去 AopProxy的实现不是 public的,其实也是根据某种方式进行的封装,外部通…
Aop源码 场景:无侵入性的日志、数据监控、安全防护等 面向接口的 Java动态代理 面向类的一个 Cglib的提升 入门 demo public interface Animal { void eat(); } public class Cat implements Animal{ @Override public void eat() { System.out.println("猫猫吃 猫粮"); } } /** * 目标:返回给外部被代理后的对象 * 完成被代理对象的增强 */ publi…
思考: 1.1 Spring为什么要去提供 AopContext (Aop上下文呢?) 看部分代码:源自 JdkDynamicAopProxy 这里根据变量 exposeProxy将 Aop暴露到上下文中去了 // true -> 需要将当前代理对象 "暴露"到 Aop上下文(AopContext)中去 // 暴露后, 应用程序便能获取到 proxy if (this.advised.exposeProxy) { // Make invocation available if necess…
初始化事件传播器 initApplicationEventMulticaster initApplicationEventMulticaster protected void initApplicationEventMulticaster() { ConfigurableListableBeanFactory beanFactory = getBeanFactory(); /** 条件成立, 说明用户自定义了事件传播器, 用户可以来实现 ApplicationEventMulticaster接口, 写一款自己的时间…
子类扩展 postProcessBeanFactory BeanFactoryPostProcessor @FunctionalInterface public interface BeanFactoryPostProcessor { /** * 此处将 IOC容器本身传递了过来,只要属性容器本身,此时便可以去做一些额外的事:移除某些 beanDefinition,添加某些 beanDefinition, * 或去修改覆盖某些 bean的属性值也是可以的 * 可以对容器中已经存在的 bd信息做任何相关的操作 * 这…
容器扩展 本次主要来分析 AbstractApplicationContext.fresh() 前面的视角都主要放在了 BeanFactory接口之上,实际在工作开发过程中,并不会直接玩 BeanFactory,而是选择 ApplicationContext接口实现 这一次,让我们彻底来弄清楚 BeanFactory和 ApplicationContext二者之间的关系! ApplicationContext内部持有了 BeanFactory,ApplicationContext会在 BeanFactory初始过程…
什么是属性编辑器? 其实就是来进行类型转换来完成 bean的依赖注入的 来看个 demo: <bean id="stu" class="ioc.editor.Student"> <property name="birthday" value="2020-05-31" /> </bean> public class Student { private Date birthday; public Date…
bean 初始化 生命周期中对应 bean的初始化 initializeBean /** * bean 配置时 bean有一个 init-method属性 * 这个属性的作用在 bean初始化之前 去调用 init-method指定的方法, 根据用户的业务进行相应的初始化 * 总结:这里主要做了什么事? * 1.激活 Aware方法 * 2.处理器的应用 * 3.激活自定义的 init方法 */ protected Object initializeBean(String beanName, Object bean…
依赖注入 populateBean populateBean /** * 这里来完成依赖注入 * 总结: * 1.执行实例化之后对应的后置处理器 postProcessAfterInstantiation, 根据返回值可以来控制是否继续进行属性的填充 * 2.根据注入类型 (byName / byType), 提取依赖的 bean,并统一存入 PropertyValues中 * 3.应用 后置处理器InstantiationAwareBeanPostProcessor的 postProcessorPropertie…
autowireConstructor 构造函数的自动注入 protected BeanWrapper autowireConstructor( String beanName, RootBeanDefinition mbd, @Nullable Constructor<?>[] ctors, @Nullable Object[] explicitArgs) { /** 使用 ConstructorResolver来代理实现 **/ return new ConstructorResolver(this…
一 | 二 | 三 | 四 | 五 | 六 | 日 |
---|---|---|---|---|---|---|
« 3月 | ||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
COPYRIGHT © 2020 良夜的博客. ALL RIGHTS RESERVED.
This blog has been running:
本站由
This site is protected by wp-copyrightpro.com