一,spring好处(为什么要用spring)
1.方便解偶,简化开发
spring就是一个大工厂,可以将所有对象的创建和依赖关系维护,交给spring管理
2.AOP编程的支持
spring提供面向切面编程,可以方便的实现对程序进行拦截,实现权限拦截,性能监测等功能
3.声明式事务的支持
只需要通过配置就可以完成对事务的支持,无需手动编程
4.方便程序测试
spring对junit4支持,可以方便通过注解测试spring程序
5.方便集成各种优秀框架
spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架的支持(mybaits,quartz,mq等)
6.降低javaee api的使用难度
spring对javaee开发中非常难用api(jdbc,javamail,远程调用)提供了封装,使这些api应用难度大大降低
二,spring应用
1.核心技术ioc和aop
2.数据访问
3.表现层
4.集成(整合其他技术)
三,基本概念
1.ioc(控制反转):将程序中对象的创建权,交给spring工厂来管理。
原理:工厂,配置文件,反射
根据配置文件获取容器上下文,applicationContext,根据applicationContext.getbean获取具体对象
2.spring工厂超级接口 BeanFactory
BeanFactory采用延迟加载,第一次getBean时才会初始化Bean
ApplicationContext是对BeanFactory拓展,提供了很多功能:
国际化处理,事件传递,Bean自动装配,各种不同应用层的Context实现
3.BeanFactory和FactoryBean的区别
BeanFactory是管理对象的工厂,FactoryBean是工厂模式创建的一个对象
四,spring实例化bean三种方式
1.默认无参构造器
<bean id="" class=""/>当application读到class这里,工厂中的对象就会实例化
2.静态工厂方法 实例化
public class Bean2Factory{
public static bean2 initBean2(){
return new bean2();
}
}
常用serveletActionContext.getRequest()
<bean id="" class="" factory-method="">
3.实例工厂方法
public class Bean3Factory{
public Bean3 createBean3(){
return new Bean3();
}
}
例如:sessionFactory的openSession(); request的getSession();
<bean id="bean3Factory" class="">
<bean id="bean3" factory-bean="bean3Factory" factory-method="createBean3">
第三种方式简化:
spring规范提供FactoryBean接口
public class MyFactoryBean implements FactoryBean<Bean3>{
@override
public Bean3 getObject() throws Exception{
return new Bean3();
}
}
<bean id = "bean3" class="...MyFactoryBean" />
五,Bean的作用域
1.singleton单例 springioc仅存在一个bean实例,Bean以单例形式存在
2.prototype多例 每次从容器获取bean实例,都是new出来的新实例
默认单例
六,Bean的生命周期
1.bean的初始化和销毁
构造 初始化 销毁
在配置<Bean> 通过init-method属性和destory-method属性指定两个方法
destory必须在工厂调用close方法时,才会执行,默认不会执行
七,BeanPostProcessoor
在bean初始化前后,对目标对象增强钩子程序,分后处理器和前处理器两种,初始化前后;
实现需要注册到spring工厂中
八,依赖注入属性配置
构造器注入,setting注入,
接口注入,配置不支持,但是spring内部提供很多符合接口注入api(ApplicationContextAware)
p名称空间简化setting注入
spring3.0之后,增强spring配置,提供spring expression language语言(spEL)
可以直接注入对象,调用对象属性或方法
集合类型属性注入:
数组或list-----<List>或者<array>
set --<set>注入
map ------<map><enter>注入
properties--------<props><prop>注入
九,springioc初始化
org.springframework.web.context.ContextLoaderListener
随着tomcat启动初始化;(ApplicationContext)this.getServletContext(); 获取
十,spring和junit集成测试
使用 @RunWith注解 和 @ContextConfiguration 注解集成测试
初始化 spring容器