JAVA尚硅谷之Spring注解驱动原理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JAVA尚硅谷之Spring注解驱动原理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2810字,纯文字阅读大概需要5分钟。
内容图文
![JAVA尚硅谷之Spring注解驱动原理](/upload/InfoBanner/zyjiaocheng/627/2bb70b6302b34195a0adbbfaa3b959c5.jpg)
AOP注解原理
实现AOP切面需要做的三步
- 1)将业务逻辑组件和切面类都加入到容器中,告诉Spring哪个是切面类(@Aspect)
-
- 在切面类上的每一个通知方法上标注通知注解,告诉Spring何时何地运行(切入点表达式)
-
- 开启基于注解的aop模式,@EnableAspectJAutoProxy
第一步:看 @EnableAspectJAutoProxy做了什么
配置类:
MainConfigOfAOP.java
@EnableAspectJAutoProxy
@Configuration
public class MainConfigOfAOP {
@Bean
public MathCalculator calculator(){
MathCalculator cal = new MathCalculator();
int i=0;
return cal;
}
@Bean
public LogAspects logAspects(){
return new LogAspects();
}
}
切面类
LogAspects.java
@Aspect
public class LogAspects {
@Pointcut("execution(public int com.atguigu.aop.MathCalculator.*(..))")
public void PointCut(){}
@Before("PointCut()")
public void logStart(JoinPoint joinPoint){
Object[] args = joinPoint.getArgs();
System.out.println(joinPoint.getSignature().getName()+"运行,,,参数列表:{"+Arrays.asList(args) +"}");
}
@After("PointCut()")
public void logEnd(){
System.out.println("除法结束");
}
@AfterReturning(value="PointCut()",returning = "result")
public void logReturn(Object result){
System.out.println("除法正常返回。。运行结果:{"+result+"}");
}
@AfterThrowing(value = "PointCut()",throwing = "exception")
public void logException(Exception exception){
System.out.println("除法运行异常");
}
逻辑组件
MathCalculator.java
public class MathCalculator {
public int div(int i,int j)
{
System.out.println("计算结果:"+i/j);
return i/j;
}
}
开始分析:
- 进入nableAspectJAutoProxy,里面需要@Import(AspectJAutoProxyRegistrar.class),会把AspectJAutoProxyRegistrar放入到容器中,跳转到AspectJAutoProxyRegistrar
class AspectJAutoProxyRegistrar implements ImportBeanDefinitionRegistrar {
/**
* Register, escalate, and configure the AspectJ auto proxy creator based on the value
* of the @{@link EnableAspectJAutoProxy#proxyTargetClass()} attribute on the importing
* {@code @Configuration} class.
*/
@Override
public void registerBeanDefinitions(
AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
//对AspectJAnnotationAutoProxyCreator的一个类进行注册
AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry);
//......
}
}
最终在AopConfigUtils中的方法内把
key为 org.springframework.aop.config.internalAutoProxyCreator
value为 org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator 的bean定义
的键值 注册到BeanDefinitionRegistry类中(此时只是注册,还未实例化)
- 看一下 AnnotationAwareAspectJAutoProxyCreator 的定义
AnnotationAwareAspectJAutoProxyCreator:继承关系
AnnotationAwareAspectJAutoProxyCreator
AspectJAwareAdvisorAutoProxyCreator
AbstractAdvisorAutoProxyCreator
AbstractAutoProxyCreator
SmartInstantiationAwareBeanPostProcessor, BeanFactoryAware
说明AnnotationAwareAspectJAutoProxyCreator本身是一个后置处理器,所有我们需要关注
后置处理器(就是bean初始化前后做事情),自动装配BeanFactory
内容总结
以上是互联网集市为您收集整理的JAVA尚硅谷之Spring注解驱动原理全部内容,希望文章能够帮你解决JAVA尚硅谷之Spring注解驱动原理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。