Spring框架的知识点总结
1.1. Spring框架是一个开源的J2EE应用框架,是管理bean的生命周期的轻量级容器.
1.2. IOC,即控制反转,将对象的创建权利交给spring框架完成,由容器管理对象的生命周期.解决了框架和框架之间耦合性问题.
- 1.2.1 容器的数据结构: K-V Map<K,V> key=bean中的ID, value=反射机制实例化的对象.
- 注解
- @Configuration 标识当前类是配置类
- @ComponentScan 包扫描注解 扫描注解
- @Bean 标识该方法的返回值交给Spring容器管理
- @Scope 控制多例和单例
- Spring容器默认条件下,对象都是单例对象
- @Lazy 懒加载
- 懒加载的控制,只对单例对象有效
- 注解
- 1.2.2 spring对象的生命周期
- 生命周期说明
- 对象创建
- 初始化数据
- 调用方法,完成功能
- 对象销毁
- 注解
- @PostConstruct 标识初始化方法
- @PreDestroy 标识销毁方法.
- 生命周期说明
- 1.2.3 Spring管理对象
@Component 将当前类未来的对象交给容器管理
1.3 Spring-DI 依赖注入
- 注入方式:
- 通过set方法为属性赋值. property
- 通过构造方法为属性赋值. constructor-arg
- 工厂模式注入
- 注解:
- @value() 简单属性赋值
- @Autowired 引用赋值
- 默认按照类型匹配
- 按照名称匹配
- @Qualifier
1.4 Spring层级代码结构
- Controller层 @Controller
- Service层 @Service
- Dao/Mapper层 @Repository
- POJO 根据数据表定义的实体对象
1.5 AOP,即面向切面编程,在不修改原有代码的条件下对方法进行扩展.使得业务逻辑各部分之间的耦合度降低.
- 连接点 切入点 通知 切面 编织
- 1.5.1 动态代理: 使用代理对象和使用目标对象看起来一模一样
- 1.5.2 JDK动态代理
- JDK动态代理是JDK源码提供的,无需导入额外的jar包.
- JDK代理对象要求实现和被代理者相同的接口,必须有接口
- JDK代理创建速度快,运行时稍慢
- 1.5.3 CGLIB动态代理
- cglib动态代理需要导入额外的包,才能使用.
- cglib 要求被代理者有无接口都可以, 但是cglib代理对象是目标对象的子类. (继承)
- cglib创建代理对象时慢,但是运行期速度快.
- 1.5.4 注解:
- @Aspect 标识当前类是一个切面
- @Pointcut 标识切入点表达式
- @Before 通知注解
- @EnableAspectJAutoProxy 让AOP有效
- 1.5.5 切入点表达式 --配置AOP为谁创建代理对象
- @Pointcut(" bean(“对象的ID”) ")
- @Pointcut(“within(包名.类名)”)
- @Pointcut(“execution(返回值类型 包名.类名.方法名(参数列表))”)
- 1.5.6 通知方法
- 一般记录程序的运行状态.
- @Before AOP-前置通知
- @AfterReturning AOP-后置通知
- @AfterThrowing AOP-异常通知
- @After AOP-最终通知
- 控制目标方法是否运行
- @Around AOP-环绕通知 ----最为强大
- 一般记录程序的运行状态.
1.6 Spring框架的优势
- 1.6.1 实现了松耦合
- 1.6.2 可以整合其他第三方框架,使程序可以以一种统一的方式进行调用