目录
Spring简介
spring是一个轻量级框架,也是一个容器,是企业级应用中的一个软件开发框架,是一个半成品。最大的优势是更好的实现了资源的整合,简化应用软件开发,降低软件开发周期。最核心的是IoC控制反转、DI依赖注入、Bean工厂,Spring AOP面向切面编程、事务控制。
spring的核心配置文件
spring的核心配置文件为applicationContext.xml。里面配置bean对象,即如果自己创建的类需要由spring管理,就需要对类进行配置,常用的配置方式有两种:一种是配置文件,一种是注解。
配置文件的bean对象:
<!-- id:为类的对象名,可以自定义,但是名字是唯一的,不能有重复的。 class:为类的全路径,即包名加类名 scope:管理bean对象的作用域。该属性有两个最常用的值: singleton:单例设计模式,默认值。这个作用域标识的独享具备全局唯一性。即每次调用该bean只会创建一次,不会调用一次new一次对象。负责对象的创建、初始化、销毁。 prototype:多例。这个作用域标识的对象每次获取都会创建新的对象。只负责对象的创建和初始化,不负责销毁。 --> <bean id="hello" class="com.tedu.hello.Hello" scope="prototype"></bean>
配置文件的约束头
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
IoC控制反转
- IoC,inversion of control,就是指将对象的创建,对象的存储,对象的管理交给spring容器管理,不用自己创建对象。简单来讲,就是之前自己创建对象(User u=new User())变成由初始化的xml配置文件来创建,即spring容器进行创建对象,加载时会遍历配置文件,读取bean标签,获取类的全路径,通过反射创建这个类对象。
- IoC有三个核心:BeanFactory、反射、DI。BeanFactory利用反射机制来实现对象的创建,DI实现对象关系管理。
- IoC是面向对象编程中的一种设计原则,用来降低代码之间的耦合度。最常见的方式为依赖注入。
DI依赖注入
DI,Dependency Injection,依赖注入。相对于IoC而言,DI更加准确地描述了IoC的设计理念。所谓DI,就是组件之间的依赖关系有容器在应用系统运行期来决定,也就是由容器动态地将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组建之中。
DI的四种注入方式:set方式注入,构造方法注入,静态工厂的方法注入,实例工厂的方法注入。
Set方式注入
最简单的注入方式,通过setXXX方法注入。分为以下几种注入方式:
- 普通属性注入
public class User { private String name; private Integer age; }
<bean id="user" class="com.tedu.hello.User"> <!-- name:实体对象的属性名。value:实体对象的属性值--> <property name="name" value="张三"></property> <property name="age" value="32"></property> </bean>
- 对象属性注入
public class User { //实体类中加一个关联的实体类对象 private UserInfo info; }
<bean id="user" class="com.tedu.hello.User"> <property name="info" ref="userinfo"></property> </bean> <!-- 描述的是关联对象的信息userinfo --> <bean id="userinfo" class="com.tedu.hello.UserInfo"> <property name="skin" value="黄种人"></property> </bean>
- 集合属性注入
public class User { //集合属性 private List list; private Map map; private Set set; private Properties dbprops; }
<bean id="user" class="com.tedu.hello.User"> <!-- 集合属性 --> <property name="list"> <list> <value>王五</value> <value>张三</value> </list> </property> <property name="set"> <set> <value>吃饭</value> <value>睡觉</value> <value>打豆豆</value> </set> </property> <property name="map"> <map> <entry key="年龄" value="18岁"></entry> <entry key="体重" value="100斤"></entry> </map> </property> <property name="dbprop"> <props> <prop key="username">root</prop> <prop key="password">root</prop> </props> </property> </bean>
构造方法注入
构造方法注入是指带有参数的构造函数注入。
public class Dept { private Integer id; private String deptName; //带参构造方法 public Dept(Integer id, String deptName) { this.id = id; this.deptName = deptName; } }
<bean id="dept" class="com.tedu.hello.Dept"> <!--index:索引,参数的位置 --> <constructor-arg index="0" value="001"/> <constructor-arg index="1" value="软件研发部"/> </bean>
静态工厂的方法注入
静态工厂,就是通过静态工厂的方法来获取自己需要的对象。
实例工厂的方法注入
实例工厂,就是获取对象实例的方法不是静态的,所以先new工厂类,再调用普通的实例方法。