Spring框架
- Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。
 
- 控制反转
 
- 面向切片编程
 
IOC 控制反转
将new 对象的(创建,管理,销毁..)任务交给 Spring去管理,程序员只需要去设置bean或者注解,然后申请使用即可
DI 辅助IOC
对IOC的依赖进行注入
bean的三种创建模式:
1.空参构造
2.静态工厂
3.动态工厂
XML配置模式:
bean标签的基本配置
将需要给spring管理的class进行配置
1 2 3 4 5 6 7 8 9 10 11
   | name: 该对象的名字,供给后面使用的定位 (不建议重复) class: 给spring管理的类的路径 lazy-init: 懒加载,谁用谁加载 scope:  默认 单例模式,只调用一次构造         prototype: 多例模式,调用一次,新建一次对象         request         session  在web项目中使用,与对应的r/s生命周期相同 init-method: 初始化后调用的 方法 destroy-method: 销毁前调用的方法
  eg: <bean name = "" class = "" lazy-init = "" scope = " " ....>
   | 
 
属性注入
为bean对象注入依赖的值
1 2 3 4 5 6 7 8 9
   | 1.set方法注入:     1.基本类型注入: <property name = "注入的字段名" value = " "/>      2.引用类型注入: <property name = "注入的字段名" ref = " "(已经创建的bean 的name)/> 2.构造方法注入:<property name = "注入的字段名" value = "值" ref = "" type = "指定参数类型"  index = "指定参数索引" />  3.复杂类型注入:     <property name = "注入的字段名">         1.list  <list><value></value></list>         2.map   <map><entry key = "" value = ""></map>     </property>
   | 
 
注解开发模式:
bean对象的管理与配置
1 2 3 4 5 6 7
   | 创建bean对象 @Component("name") 为了更加细化:  1.@Controller("name") web层                2.@Service("name") service层                3.@Repository("name") dao层 @scope @init-method @destroy-method
  | 
 
属性注入
1 2 3 4
   | 直接在set方法或者构造方法上加注解 @value("value") 注入值类型 @Autowired()注入引用类型 @Resource("name") 手工装配bean的name 注入引用类型
   | 
 
使用Junit整合Spring进行单元测试
1 2 3 4 5
   | 在测试类中使用注解 @RunWith(SprngJUnit4ClassRunner.class) //使用junit进行测试,创建容器 @ContextConfiguration("classpath:...xml") // 读取配置文件 在需要的测试方法上 @Test 
   | 
 
其他内容
1 2
   | 1.导入其他的Spring配置文件 <import resource = "...xml"/>
   | 
 
Spring-AOP 面向切面编程
 将纵向重复的代码,横向抽取解决  —- 基于动态代理
 (AOP术语解释 https://blog.csdn.net/yuanye348623610/article/details/8823429)
 两种动态代理
 1.接口 —- 2.继承
1 2 3 4 5 6 7 8 9 10 11 12 13 14
   | AOP的配置: <aop:config> <!-- 切入点 --> <aop:pointcut expression = "切入点表达式(要增强的方法)"  id="标识"/> <!-- 切面 通知+切入点 --> <aop:aspect ref="通知"> <aop:before method="方法名" pointcut-ref = "代理对象"/> 最终通知 <aop:after...> 前置通知 <aop:after-returning...> 成功通知 <aop:after-throwing..> 异常通知 <aop:around...> 环绕活动 </aop:aspect> 
  </aop:config>
   |