一.IOC
依赖注入DI
使用依赖注入实现控制反转,即上层控制下层。把底层类作为参数传递给上层类,实现上对下的控制
Spring IOC容器
BeanFactory接口的简单容器
ApplicationContext应用上下文
Spring中的Bean
定义bean
@Component Spring基础的注解,被spring管理的组件或bean.
@Repository 用于持久层,数据库访问层,是用来直接访问数据库的。
@Service 用于服务层,处理业务逻辑
@Controller 用于呈现层,(Spring-MVC),暴露给前端的入口
注入Bean
@Autowired 默认是按照资源的类型(class)查找并注入的。
@Resource 默认是按照资源的名称(name)查找并注入的。
@Qualifier 采用@Autowired如果存在多个实现类的情况下,@Qualifer注 解通过资源名称确定唯一性
Bean的作用域
Spring Bean的加载过程
Bean的加载逻辑
转换 BeanName-->从缓存中加载实例-->实例化Bean-->
检查parentBeanFactory-->初始化依赖的Bean-->创建Bean
二.约定编程
三.AOP
AOP的优点
Spring AOP可以处理一些无法使用OOP实现的业务逻辑。其次,通过约定可以将一些业务逻辑织入流程中,并且可以将一些通用的逻辑抽离出来,然后给与默认实现,这样你只需要完成部分的功能就可以了。这样做可以使得开发者的代码更加简短,同时可维护性也得到提高。
AOP的术语
- 连接点(join point ):对应的是具体被拦截的对象,因为spring只能支持方法,所以被拦截的对象往往就是指特定的方法。例如用户的插入insertUser()方法就是一个连接点,AOP通过动态代理技术把它织入到对应的流程中。
- 切点(point cut):有时候,我们的切面不单单应用于单个方法,也可能是多个类的不同方法,这时,可以通过正则式和指示器规则去定义,从而适配连接点。切点就是提供这样一个功能的概念。
- 通知(advice): 就是按照约定的流程下的方法,分为前置通知(before advice),后置通知(after advice),环绕通知(around advice),事后返回通知(afterReturning advice),异常通知(afterThrowing advice),它会根据约定织入流程中,需要弄明白它们在流程中的顺序和运行的条件。
- 目标对象(target):即被代理对象,例如我们写的ServiceImpl服务层实现类的实例
- 引入(introduction):是指引入新的类和其方法,增强现有Bean的功能。
- 织入(weaving):它是一个通过动态代理技术,为原有服务对象生成代理对象,然后将与切点定义匹配的连接点拦截,并按照约定将各类通知织入约定流程的过程。
- 切面(aspect):是一个可以定义切点,各类通知和引入的内容,spring aop通过它的信息来增强Bean的功能或者将对应的方法织入流程。