3年前
⋅
0
基础
原文参考 Spring核心知识详细教程
上图中有三层
- web层: struts充当web层,接管jsp,action,表单,主要体现出mvc的数据输入,数据的处理,数据的显示分离
- model层: model层在概念上可以理解为包含了业务层,dao层,持久层,需要注意的是,一个项目中,不一定每一个层次都有
- 持久层: 体现oop,主要解决关系模型和对象模型之间的阻抗
总结
spring是一个容器框架,它可以接管web层,业务层,dao层,持久层的各个组件,并且可以配置各种bean, 并可以维护bean与bean的关系,当我们需要使用某个bean的时候,我们可以直接getBean(id),使用即可
ioc(inverse of control)控制反转:所谓反转就是把创建对象(bean)和维护对象(bean)的关系的权利从程序转移到spring的容器(spring-config.xml)
di(dependency injection)依赖注入:实际上di和ioc是同一个概念,spring的设计者,认为di更准确的表示spring的核心
实质上学习框架就是,最重要的就是学习各个配置
Bean的生命周期
生命周期分为以下几步:
当我们加载sping-config.xml文件时,bean就会被实例化到内存(前提是scope=singleton)
调用set方法设置属性,前提是有对应的set方法
- 3、如果你调用BeanNameAware的set’Bean’Name()方法
这是个接口,该方法可以给出正在被调用的bean的id
- 4、如果你调用BeanFactoryAware的setBeanFactory()方法
这也是个接口,该方法可以传递beanFactory
- 5、如果你调用了ApplicationContextAeare的setApplicationContext()方法
同样为接口,该方法传递一个ApplicationContext
- 6、BeanPostProcessor的预初始化方法Before
这个东西很厉害了,可以叫做后置处理器,它不是接口,具体细节,代码体现
-
7、如果你调用了InitializingBean的afterPropertiesSet()方法
-
8、调用自己的init方法,具体为在bean中有一个属性inin-method=”init”
-
9、BeanPostProcessor的方法After
-
10、使用bean,体现为调用了sayHi()方法
-
11、容器关闭
-
12、可以实现DisposableBean接口的destory方法
- 13、可以在调用自己的销毁方法,类似于8
Aop 编程
- aop术语
- 切面: 要实现交叉功能,是系统模块化的一个切面领域,如记录日志
- 连接点: 应用程序执行过程中插入切面的地点,可以是方法调用,异常抛出,或者要修改的字段
- 通知: 切面的实际实现,它通知系统的新行为,如日志通知包含了实现日志功能的代码,如向日志文件写日志,通知在连接点插入应用系统中。
- 切入点:定义了通知应该应用在哪些连接点,通知可以应用到AOP框架支持的任何连接点
- 切入点是动态概念,当通知应用了连接点,连接点就变成了切入点
- 引入: 为类添加新方法和属性
- 目标对象: 被通知的对象,既可以是你编写的类,也可以是第三方类
- 代理: 将通知应用到目标对象后创建后的对象,应用系统的其他部分不用为了支持代理对象而改变
- spring 的两种代理
- 若目标对象实现了若干个接口,spring使用JDK的java.lang.reflect.Proxy类代理
- 若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类
- 织入: 将切面应用到目标对象从而创建一个新代理对象的过程,织入发生在目标对象生命周期的多个点上
- 编译期: 切面在目标对象编译时织入,这需要一个特使的编译器
- 类装载期: 切面在目标对象被载入jvm时织入,这需要一个特殊的类加载器
- 运行期: 切面在应用系统运行时切入