9_17 AOP,Shiro, Spring启动原理了解总结

本文深入解析了Spring AOP的工作原理,包括@EnableAspectJAutoProxy的作用,如何生成代理对象及切面方法的执行流程。同时,阐述了PreparedStatement防止SQL注入的机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AOP: 首先是因为加上了 @EnableAspectJAutoProxy , 他会给容器导入一个 AnnotationAwareAspectJAutoProxyCreator, 这是一个后置处理器,在Spring容器启动创建剩下的bean的时候,会给相应的后置处理器一个机会去创建代理对象, 而

AnnotationAwareAspectJAutoProxyCreator,就是可以拦截bean初始化,他会判断当前bean是否符合生成代理对象的条件,如果符合的话,他会把切面方法包装成增强器,并且生成一个代理对象。
比如说 Calculator 是一个符合代理的bean, 在使用 Calculation cal = application.getBean("calculation"); 返回的 cal 就是一个代理对象。 在执行 cal 的某个方法,比如说 div 的时候, 执行的其实是 代理对象的inceptor 方法,这个方法会把增强器包装整

理成拦截器链,然后按照这个拦截器链依次执行,其中有一环就是执行 div 方法,有两种执行流程
    1、前置方法 -> 目标方法 -> 后置方法 -> 返回方法
    2、前置方法 -> 目标方法 -> 后置犯法 -> 异常方法


使用PreparedStatement为什么可以防止sql注入?
    sql注入主要利用的是单引号 ' ,就像一个sql语句是 select * from user where username = '等待拼接的内容', sql 注入可以这样子写 select * from user where username = 'a' or 1
这样子user 中的数据就会都被查找出来了,而preparedStatemt会把后来加进去的单引号替换成/' 也就是把单引号给转义了,后来加进去的内无法“切割”sql 语句了,所以他可以防止sql 注入


shiro 的认证过程
    首先是在controller 中将用户名和密码封装成UsernameAndPasswordToken 调用 Subject.login(token)方法,这个Subject是一个接口,运行的时候注入的是DelegatingSubject 的login 方法,DelagatingSubject类中有一个成员变量SecuriManager,这个也是一个接口,注入的是DefaultSecurityManager, 所以说实际上调用的是 DefaultSecurityManager 的login 方法,这个login方法调用的是他的一个成员变量Authenticator,这个接口的实现类的认证方法Authenticator  会去遍历所有是Realm,并且调用他们的认证方法

 

Spring 启动过程
    1、先创建BeanFactoty(第一步是把BaenFactory new出来,然后对他进行各种赋值)
    2、执行BeanFactory 创建完成后的后置处理器对应的方法
    3、注册后置处理器
        1、不同的后置处理器的注册时机是不一样的
        2、相同的后置处理器会先注册实现了优先级接口的后置处理器
    4、注册国际化组件
    5、初始化事件派发器
    6、注册监听器
    7、初始化剩下的bean
        1、会先去看缓存中有没有,有的话直接拿,就不直接创建了
        2、会给后置处理器一个创建代理对象的机会,如果后置处理器可以返回对象的话,就拿这个代理对象了。
        3、在bean实例创建完成之后,就是属性的赋值,在赋值之前和赋值之后都会有相应的后置处理器进行处理。
        4、之后执行的是对象的初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值