Spring基础
一、Spring 概述
1)什么是Spring
是一个开源设计层的框架,解决的是业务逻辑层和其他层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。
2)Spring特点
1.方便解耦,简化开发。
通过Spring 提供的IOC容器,我们可以将对象之间的依赖关系交由Spring 控制,避免硬编码造成的过度耦合,有了Spring,用户不再为单实例模式类,属性文件解析这些很底层的需求编写代码,可以更专注于上层应用。
2.AOP编程支持
通过Spring提供的AOP功能,方便进行面向切面编程。
3.声明式事务的支持
在Spring中,我们可以从单调的事务管理代码中解脱出来,通过声明式方式灵活的进行事务的管理,提高开发效率和质量。
4.方便程序的调试
可以用非容器依赖的编程方式进行几乎所有的测试工作,在SPring里,测试不再是昂贵的操作,而是所手可以做的事情,例如:Spring对Junit4的支持,可以通过注解方便的测试Spring程序。
5.方便集成各种优秀框架
6.降低java EE API的使用难度。
Spring 对很多难用的javaEE API(如JDBC,javaMail,远程调度等)提高了一个薄薄的封装层,通过Spring 简易封装。
3.下载
https://repo.spring.io/webapp/#/artifacts/browse/tree/General/libs-release-local/org/springframework/spring
二、IOC
1)什么是IOC:Inversion of Control(控制反转:将对象的创建权反转给Spring)
2)传统开发模式:
1.业务和实现类过于紧密,底层业务需要修改源代码。
2.通过工程可以实现,接口于实现业务分离(但还是需要修改少量代码)
3.在工厂内部使用配置文件加载。
3)使用Spring-Ioc:
1.添加jar包
2.创建配置文件:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context ="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd" > </beans>
3.在配置文件中添加配置选项
<bean id="UserDao" class="com.ual.demo1.UserDaoMysqlImpl"></bean><!--id对应接口名,class对应接口的具体实现类-->
4.测试
@Test public void test(){ //1.加载配置文件 ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");//全路径 //2.根据id,获取对象 UserDao userDao = (UserDao) applicationContext.getBean("UserDao"); userDao.save(); userDao.delete(); }
三、IOC与DI
1)什么是DI:
依赖注入:给Spring管理类当中依赖的属性,通过配置文件进行赋值的过程。
前提是必须又IOC的环境,Spring管理这个类的时候才能将类的依赖的属性值(注入)设置进来。
<bean id="UserDao" class="com.ual.demo1.UserDaoOracleImpl"> <!-- name:要注入的属性值 实现类中要有该值的set方法
value:注入值(赋值) --> <property name="name" value="ual"></property> </bean><!--id对应接口名,class对应接口的具体实现类-->
@Test public void test2(){ //依赖注入 ApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext.xml"); UserDaoOracleImpl userDaoOracle= (UserDaoOracleImpl)applicationContext.getBean("UserDao"); System.out.println(userDaoOracle.name); }
注意:1.实现类当中的属性要提供set方法
2.在配置文件中配置依赖注入,赋值。
2)Spring工厂类:
1.BeanFactory:老版本使用,当调用getBean的时候才会创建实例对象
2.ApplicationContext:新版本使用,当加载配置文件时就会创建实例对象
3.ApplicationContext实现类:
3.1ClassPathXmlApplicationContext:加载类路径下的配置文件。
3.2FileSystemXmlApplicationContext:配置文件放在其他位置,不是放在工程,写该位置全路径。(一般不用)
四、Bean相关配置
1)名称与标识
1.id:使用了约束中的唯一约束,里面不能出现特殊字符。(用这个)
2.name:没有使用约束中的唯一约束,允许重复,可以有特殊字符。
2)设置对象的生命周期方法
1. init-method:Bean被初始化的时候执行的方法
2.destory-method:Bean被销毁的时候创建的方法(默认Bean是单例创建,工厂关闭时Bean对象自动销毁)applicationContext.close()关闭工厂,工厂里的所有对象都会销毁
在bean中配置,在Bean类中实现。
3)Bean的作用范围配置:
scope:singleton:单例创建bean对象(默认)
propotype:多例,工厂关闭时,多例对象不会自动销毁,而是靠gc
request:应用web项目中,Spring 创建这个类后,这个类存入到request范围。
session:应用在web项目中,Spring创建这个类后,将这个类存入到session范围
globalsession:应用在web项目中,必须在porlet(基于web组建,子域名)环境下使用,但是如果没有这种环境,相对于session。
4)工厂实例化的方式
1.无参构造(默认): 创建对象时,执行默认构造方法。
2.静态工厂实例化:
<bean id="User" class="com.ual.demo2.User" factory-method="createUser"></bean>
3.实例工厂实例化:
五、分模块配置
1)有多个applicationContext文件,引入到一个applicationContext中,有两种方式
1.在加载器中写多个字符串,把多个applicationContext.xml引入,用逗号隔开
2.在总的applicationContext.xml中通过improt引入其他配置文件
<import resource="applicationContext1.xml"></import>