Spring
IOC
控制反转容器,也可以称为依赖注入,存放SpringBean
@Resource
ByType
ByName(默认)
反射机制
反转是指本该有调用者创建的对象,交给了Spring来创建与管理,IOC是一个容器,创建好的Bean在IOC的Map中
DI注入,简单的说就是拿到对象的属性
从IOC中获取Bean
根据Class
根据ID和类型的字节码返回不需要强转
创建的都是单例模式,减少了内存占用
加载过程
定位:定位配置文件以及配置信息
解析:解析信息
分析:
AOP
切面aspect,切点Pointcut,连接点Join Point,通知advice
bean生命周期
1、实例化
2、设置属性
1、BeanNameWare 的 setBeanName()
2、BeanFactoryWare的 setBeanFactory()
3、ApplicationContextWare的setApplicationContext()<br>
3、初始化
1、postProcessBeforeInitialization()<br>
2、InitializingBean()--init-method()<br>
3、postProcessAfterInitialization()<br>
4、使用
@Transaction
失效:捕获了异常
使用AOP 现实
Bean加载过程<br>
1、获取BeanName
2、合并Bean定义,对父类的定义进行合并,获取完整的Bean定义
3、实例化,使用构造或工厂方法创建Bean实例<br>
4、属性填充,寻找并且注入依赖,依赖的Bean<br>
5、初始化,调用自定义的初始化方法
6、获取最终的Bean,如果是FactoryBean需要调用getObject()
循环依赖
三级缓存,其实就是三个Map,实例化完成的bean在一级缓存,在bean注入属性的过程中,如果需要注入一个没有创建完成的bean时,可以在二级和三级中的找已经实例化的对象,以不至于没有办法完成注入。
scope=“Protopart”原型无法解决循环依赖
构造器也无法解决循环依赖?@lazy
1、拿bean的时候先从singletonObjects(一级缓存)中获取<br>2、如果获取不到,并且对象正在创建中,就从earlySingletonObjects(二级缓存)中获取<br>3、如果还是获取不到就从singletonFactories(三级缓存)中获取,然后将获取到的对象放到earlySingletonObjects(二级缓存)中,并且将bean对应的singletonFactories(三级缓存)清除<br>4、bean初始化完毕,放到singletonObjects(一级缓存)中,将bean对应的earlySingletonObjects(二级缓存)清除
SpringMVC
SpringMVC流程
1、DispatcherServlet前端控制器
2、requestMapping找对应的handler
3、得到handler适配器,执行handler拦截器
4、执行handler逻辑处理返回modelandview<br>
5、执行handler的post拦截器
6、根据modelandview得到view
7、渲染View返回
Mybatis
防止SQL注入
Mybatis启用了预编译的功能,在SQL执行前,先对数据库进行编译;执行时,直接使用编译好的SQL,替换占位符
预编译的底层原理就是JDBC中的preparedStatement
#与$
#,在SQL中转化为字符串,经过预编译
$,将值拼接到SQL语句上
MyBatis与Spring集成
shrio
核心组件
Authenticator,管理登录登出<br>
Authorizer,管理权限<br>
session Manager,session管理器<br>
session Dao,session增删改查
Cache Manager,缓存管理器
ralems,与数据库交互<br>