-
概念
- 简介:
- 企业级Java开发最流行的框架
- 模块化
- 轻量级
- 无侵入
- 特点:
- 提供IOC机制,实例化对象及管理对象间依赖关系。
- 提供AOP功能,实现很多特定功能
- 声明式事务控制处理
- 提供MVC模式解决方案
- 提供文件上传、定时器等常用工具类
- 对其他优秀框架的支持(如:struts、hibernate、MyBatis、Quartz)
- 简介:
-
IOC(DI) 控制反转
- 原理解析:
- 控制反转:设计好的类交给系统去控制、而不是由类自己管理。
- 依赖注入,实现IOC的一种方式,在运行期由容器将依赖关系注入到组件中。
- 作用:
- 实例化对象
- 分析对象的依赖并注入
- 好处:
- 降低各个组件之间的耦合度
- 提高代码的可重用性
- 便于组件的维护和管理
- 无侵入,不需要组件实现特定的接口或继承某个类
- 原理解析:
-
使用
-
创建Spring示例项目—copy
- 创建项目:maven archetype:generate
- 添加依赖:context 、aop、aspectjrt、aspectjweaver
- 建类
- 配置beans.xml
- 调用API
-
配置方式:XML
<bean id="userDAO1" class="me.maiz.framework.spring.xml.impl.UserDAOImpl"> <property name="username" value="wanger" /> </bean> <bean id="userService" class="me.maiz.framework.spring.xml.impl.UserServiceImpl"> <property name="userDAO" ref="userDAO1"/><!--依赖userDAO1bean--> <!--示范了如何注入list、map、set等集合属性的值--> <property name=" " ref="" value=""> <list> <value>1</value> <value>2</value> </list> <map></map> <set></set> </property> </bean>
-
配置方式:Annotation+包扫描
添加命名空间---使用idea会自动给你增加这些 <context:component-scan base-package="me.maiz.framework.spring.anno"/>
-
java类替代配置文件+annotation+@bean
- @Configuration — 表示该类作为配置类替代配置文件的作用
- @Bean—表示将该类作为一个bean纳入spring容器中管理=等价于配置文件中bean配置项的内容
-
java类替代配置文件+annotation+包扫描
- @ComponentScan—表示使用包扫描来寻找bean(也就是使用四大组件注解的类)
-
各自的优缺点:
- 第一种,完全无侵入–即不会再原类上增加代码
- 后面几种,有一定的侵入–即增加注解等代码
-
补充:常用注解
- 这里任何一个注解都表示将该类纳入容器管理,这里主要是约定或者@ControllerAdvice之类的注解为Controller创建通知。这些就属于切面。
- @Controller 控制器
- @Service 服务
- @Repository 仓库服务DAO
- @Component 其他组件
- @Autowired 向容器请求注入一个bean 等价于property的ref和value
- @Value 用来向类的属性注入值
- 基于java的配置方式的使用
- @Bean 表示该方法创建一个springbean,等价于 ,方法名为bean的名字,返回bean的实例
- @Configuration 表示该类为配置类,等价applicationContext.xml
- @ConponentScan 表示采用包扫描方式来管理用注解的类
- 这里任何一个注解都表示将该类纳入容器管理,这里主要是约定或者@ControllerAdvice之类的注解为Controller创建通知。这些就属于切面。
-
-
AOP
- 概念
- 面向切面编程 :将一批逻辑相关性的类视作一个切面,并以切面为单位,添加功能;通常用于实现具备横切性质的系统级服务。是OOP的补充。
- 应用场景: 具有横切性质的系统级服务
- 事务==>spring 声明式事务管理
- 权限验证、
- 缓存、
- 懒加载
- 全局异常处理、
- 日志追踪,
- 性能追踪(运行时间)等等
- AOP的名词
- 切面Aspect 切面编程的完整定义模块,例如日志切面,包含何时、对准、如何等内容
- 注:切面非类
- 连接点Join point 能够植入切入切面的部分,比如方法前后、抛出异常时都可以为连接点,spring支持方法连接点
- 自然会有连接点—当定义好切入点后,包含当前对象、当前方法的信息抽象为类
- JoinPoint
- ProceedingJoinPoint
- 区别:第二个比第一个多proceed()方法。
- 自然会有连接点—当定义好切入点后,包含当前对象、当前方法的信息抽象为类
- 通知 要对切面添加的功能代码,比如 安全、事务、日志等功能代码 before/after/around/after-returning/after-throwing
- 切入点Pointcut 针对那些连接点植入通知,指定具体的拦截地点。可通过SPEL指定连接点。
- 引入Introduction 对目标类添加新方法及属性
- 代理 proxy 实现AOP的原理
- 织入Weaving 把切面应用到目标对象的过程就叫织入
- 总结:
- 何时:通知—
- 何地:哪些类的那些方法 也就是切入点
- 怎么做:通知 – 配置before、通知方法(处理逻辑的类的方法)、切入点(对那些切入点)
- 这3个被包含在切面中。
- 切面Aspect 切面编程的完整定义模块,例如日志切面,包含何时、对准、如何等内容
- AOP的实现-代理
- 动态代理
- 概念