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>