Spring框架
Spring概念:
Spring是开源的轻量级的框架,spring是一个分层的JavaEE/SE full-stack(一站式)轻量级开源框架
两个核心:
Aop:面向切面编程扩展功能不是修改源代码实现
ioc: 面向反转,把对象的创建不是通过new的方式实现,而是交给spring配置创建类的对象
Spring是一站式架构:
Spring在javaEE三层结构中,每一层都提供不同的解决技术
Web层:springMvc
业务层Service层:spring的ioc
持久层Dao层:spring的jdbc Template
Spring框架的特点:
1. 方便解耦,简化开发:spring就是一个大工厂,可以对所有对象创建和依赖关系维护,交给spring。
2. Aop编程的支持:spring提供面向切面编程,可以方便的实现对程序进行权限拦截,运行监控等功能
3. 方便程序测试:spring对Junit4支持,可以通过注解的方式测试spring程序
4. 方便集成各种优秀框架:spring可以和各种优秀的框架进行直接支持(struts2,hibernate,mybatis,quartz等)
5. 降低javaEE API的使用难度:spring对javaEE开发中非常难用的一些API(JDBC,JavaMail ,远程调用等),都提供了封装,是这些api应用难度大大降低
Spring版本:
1. hibernate 5.x常用
2. Spring 4.x常用
3. Struts2
Spring的IOC操作:
把对象的操作交给spring进行管理:
Ioc操作分为两部分:
1. ioc的配置文件方式
2. Ioc的注解方式
Ioc底层原理:
1. xml配置文件
2. Dom4j解决xml
3. 工厂设计模式
4. 反射
思想:高内聚低耦合
Ioc入门案例:
1. 导入jar包
Jar特点:都有三个jar包
Spring beans ,javadoc sources
Core container:beans ,core ,context,spel
Spring最基本的功能,导入以上四个核心的jar包就可以
还要导入日志的jar包
2. 创建类,在类里面创建方法(直接交给spring)
3. 创建spring配置文件,配置创建类
Spring核心配置文件名称和位置不是固定的,建议放到src下,官方名称applicationcontext.xml
引入schema约束:
4. 写代码测试对象创建
Spring的bean管理(xml方式)
使用bean标签:
Id:不能出现特殊符号
Class:bean对象的全路径
Name:能出现特殊符号(已经不用)
Scope属性:代表着bean的作用范围
Singleton:单例(默认值)
Prototype:多例,在spring框架集合struts2框架的时候,Action类也需要交给spring做管理,配置把action类配置成多例
Request:应用在web项目中,每次HTTP请求都会创建一个新的bean
Session:应用在web项目中,同一个HTTP session共享一个bean
Globalsession:应用早web项目中,多服务器间的session
Bean对象的创建和销毁的两个属性配置(了解):
* 说明:Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法
* init-method -- 当bean被载入到容器的时候调用init-method属性指定的方法
* destroy-method -- 当bean从容器中删除的时候调用destroy-method属性指定的方法
* 想查看destroy-method的效果,有如下条件
* scope= singleton有效
* web容器中会自动调用,但是main函数或测试用例需要手动调用(需要使用ClassPathXmlApplicationContext的close()方法)
Spring框架中Bean管理的常用注解**
1. @Component:组件.(作用在类上)
2. Spring中提供@Component的三个衍生注解:(功能目前来讲是一致的)
* @Controller -- 作用在WEB层
* @Service -- 作用在业务层
* @Repository -- 作用在持久层
* 说明:这三个注解是为了让标注类本身的用途清晰,Spring在后续版本会对其增强
3. 属性注入的注解(说明:使用注解注入的方式,可以不用提供set方法)
* 如果是注入的普通类型,可以使用value注解
* @Value -- 用于注入普通类型
* 如果注入的是对象类型,使用如下注解
* @Autowired -- 默认按类型进行自动装配
* 如果想按名称注入
* @Qualifier -- 强制使用名称注入
* @Resource -- 相当于@Autowired和@Qualifier一起使用
* 强调:Java提供的注解
* 属性使用name属性
----------
**Bean的作用范围和生命周期的注解**
1. Bean的作用范围注解
* 注解为@Scope(value="prototype"),作用在类上。值如下:
* singleton -- 单例,默认值
* prototype -- 多例
2. Bean的生命周期的配置(了解)
* 注解如下:
* @PostConstruct -- 相当于init-method
* @PreDestroy -- 相当于destroy-method
----------
Spring框架整合JUnit单元测试
1. 为了简化了JUnit的测试,使用Spring框架也可以整合测试