先简单介绍一下Spring是个啥↓
Spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架。它属于一种一站式框架,对于javaee的每一层它都提供自己的解决技术。web层使用SpringMVC,service层使用控制反转,dao层使用jdbcTemplate。今天主要介绍service层的控制反转:
定义:所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。
简而言之,对象的创建不是通过new实现,而是交给Spring配置创建对象。
实现:Spring框架的IoC实现有两种方式,一种是配置文件,另一种是注解方式。
配置文件(xml)方式
- Step1: 添加spring类库(2个)。
- Step2:编写相关类(service及dao接口和实现类)。
- Step3:编写配置文件beans.xml配置step2中类。
注解(annotation)方式
- Step1: 添加spring类库(3个,加common-annotations.jar)。
- Step2:编写相关类(service及dao接口和实现类)并在实现类相应位置添加注解
- Step3:编写配置文件beans.xml
我们来看一下配置文件实现的方式(注解方式明天再说):
在IoC中,所有的对象都称为bean。首先需要创建xml配置文件,然后引用Spring的约束,如下↓
<?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/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd">;
......
</beans>
然后,写上需要创建的对象:id是对象的名称,不能含有特殊符号(想用符号可以用name);class是想要创建的对象所对应的类的路径。
<bean id=“user" class="com.csdn.class.User"/>
上面实例化bean采用的是三个方法中的采用类的无参构造器实例化,剩下两种分别是静态工厂方法实例化和实例工厂方法实例化。后两种方法用的比较少,就不展开说了。
下面是具体使用:假设有个User类,现在开始获取User的对象
public class TestIoc {
@Test
public void test(){
//加载配置文件
ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
//获取对象
User user=(User)context.getBean("user");
}
}
这样就完成了对象的获取。
IOC底层的原理是在一个工厂类中通过dom4j读取beans的配置文件,然后利用反射创建对象并返回。这些操作Spring已经帮我们封装好了,我们直接用就可以了。