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>
|