Spring
文章目录
- Spring
1、Spring框架宗旨:
1.1不重新发明技术,让原有的技术使用起来更加方便
2、spring几大核心功能:
2.1、IOC/DI(控制反转/依赖注入)
2.2、AOP(面向切面编程)
2.3、声明式事务
3、Spring runtime(各模块):
3.1、test:Spring提供测试功能。
3.2、Core Container:核心容器,Spring启动最基本条件
3.2.1、Beans:Spring负责创建类的对象并管理对象
3.2.2、Core:核心类
3.2.3、Context:上下文参数,用来获取外部资源或管理注解等
3.2.4、SpEL:expression.jar
3.3、AOP:实现aop功能需要的依赖
3.4、Aspects:切面AOP所依赖的包
3.5、Data Access/Integration:Spring封装数据访问层的相关内容
3.5.1、JDBC:Spring对JDBC的封装
3.5.2、ORM:封装了持久层框架的代码,比如Hibernate
3.5.3、transactions:对应Spring-tx.jar,用于声明式事务的使用
3.6、WEB:Spring完成web相关功能时需要
3.6.1、tomcat加载Spring配置文件时需要有spring-web包
4、IOC
4.1、中文名称:控制反转 英文名称:(Inversion of Control)
4.2、IOC是什么?
IOC主要完成的就是原来程序员通过new来实例化对象的事情,把new对象的事情交给Spring负责
4.3、控制反转中控制指的是:控制类的对象
4.4、控制反转中反转指的是:给Spring负责实例化对象
4.5、IOC最大的作用:解耦(解的是对象管理和程序员之间的耦)
5、搭建一个最简单的Spring框架
5.1、导入jar包
导入四个核心包和一个日志包(commons-logging)
5.2、创建一个Spring的配置文件(applicationContext.xml)
5.2.1、 文件名称和路径自定义.
5.2.2、 记住Spring 容器ApplicationContext,applicationContext.xml 配
置的信息最终是存储到了AppliationContext 容器中
5.2.3、spring 配置文件是基于schema的
5.2.4、配置文件中只需要引入基本schema(然后通过来创建对象)
默认配置文件被加载时穿件对象的
<?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.xsd">
<!-- id 表示获取到对象标识
class 创建哪个类的对象
-->
<bean id="peo" class="com.myhexin.pojo.People"/>
</beans>
5.3、编写测试方法
5.3.1、使用getBean(“标签id 值”,返回值类型);如果没有第二个参数,
则默认是Object的
5.3.2、使用getBeanDefinitionNames(),能得到Spring 容器中目前所有管理的所有
对象.
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
People people = ac.getBean("peo",People.class);
System.out.println(people);
// String[] names = ac.getBeanDefinitionNames();
// for (String string : names) {
// System.out.println(string);
// }
6、Spring创建对象的三种方式
6.1、通过构造方法创建(分为有参构造创建和无参构造创建)
无参构造创建是默认情况,有参构造创建则需要提供有参构造方法,如果有多个构造函数,则使用的是最后一个有参构造函数:
<bean id="peo" class="com.bjsxt.pojo.People">
<!-- ref 引用另一个bean value 基本数据类型或String 等-->
<constructor-arg index="0" name="id" type="int" value="123"></constructor-arg>
<constructor-arg index="1" name="name" type="java.lang.String" value="张三"></constructor-arg>
</bean>
其中index 表示参数的索引,从0 开始;name:表示参数名;type:类型(区分开关键字和封装类int 和Integer)
6.2、通过实例工厂创建(先要创建工厂,然后才能生产对象)
必须先要有个实例工厂的
public class PeopleFactory {
public People newInstance(){
return new People(1,"测试");
}
}
然后在配置文件(applicationContext.xml)中配置工厂的对象以及需要创建的对象
<bean id="factory"
class="com.myhexin.pojo.PeopleFactory"></bean>
<bean id="peo1" factory-bean="factory" factory-method="newInstance"></bean>
6.3、通过静态工厂创建
不需要创建工厂的对象先,可以快速创建对象
在上面的方法基础上加个static(就变成了静态工厂)
public class PeopleFactory {
public static People newInstance(){
return new People(1,"测试");
}
}
然后在配置文件(applicationContext.xml)中直接使用该方法,而不需要先实例化工厂。
<bean id="peo2" class="com.myhexin.pojo.PeopleFactory" factory-method="newInstance"></bean>
7、给Bean属性赋值(注入)
7.1、通过构造方法设置值(用value赋值)
7.2、设置注入(使用set方法)
7.2.1、如果属性类型是基本数据类型,则直接通过name-value来设置注入
<bean id="peo" class="com.myhexin.pojo.People">
<property name="id" value="222"></property>
<property name="name" value="张三"></property>
</bean>
7.2.2、如果属性是Collection(集合类型),如(list),其他的差不多,只是更改一下标签。
<property name="list">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
</list>
</property>
7.2.3、如果属性是map
<property name="map">
<map>
<entry key="a" value="b" >
</entry>
<entry key="c" value="d" >
</entry>
</map>
</property>
8、DI
8.1、中文名称:依赖注入 英文名称:(Dependency Injection)
8.2、什么是DI:DI和上面的IOC是一样的,当一个类中需要依赖另一个类的对象时,把另一个类的对象赋值给这个类的过程就叫DI(依赖注入)。
<bean id="peo" class="com.myhexin.pojo.People">
<property name="desk" ref="desk"></property>
</bean>
<bean id="desk" class="com.bjsxt.pojo.Desk">
<property name="id" value="1"></property>
<property name="price" value="12"></property>
</bean>
9、总结
Spring是一个容器,程序员把所有的创建类的对象的操作都交给这个容器来管理,随着配置文件的加载,里面的所有实例化对象也就随即生成了,这样就实现了对象管理和程序员之间的最大解耦的作用。
Spring存在的意义是为了让其他的技术能够更加方便的使用,比如Mybatis,把所有繁琐的创建工作都交给Spring来完成,程序员就能够更高效的开展进一步的工作。