Spring是于2003 年兴起的一个轻量级的Java 开发框架,是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架.它的主要目得是简化企业开发 源码连接下载:测试源码。
- 为了学习sping框架知识,首先创建一个maven项目,用来做测试用(注意:webapp项目;使用默认目录;创建一个目录结构为src/main/java作为java代码的存放,并且其中的输出目录与resource一致; 导入sping两个核心包 beans和core包 导入这两个之后会自动下载日志依赖包com.springsource.org.apache.commons.logging-1.1)。
- 第二步测试 首先先在application添加下面两个标签,其中在做解析时会报如下错误。(无法定位到xml命名空间,所以需要引入context类)
package come.beichende.test;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import come.beichende.pojo.Student;
public class TestSping {
@Test
public void testSping(){//beanfactory 默认使用的是直接延迟加载,调用的时候才会去加载
//创建sping容器
Resource iResource = new ClassPathResource("applicationContext.xml");
BeanFactory iBeanFactory = new XmlBeanFactory(iResource);
//取出对象
Student stu = (Student) iBeanFactory.getBean("studentPojo");
stu.stuFun();
}
//模拟spring创建对象 反射
@Test
public void moNiSping() throws Exception{
Class<?> cl = Class.forName("applicationContext.xml");
Object obj = cl.newInstance();
Field[] fidlds = cl.getFields();//取得反射对象的所有属性
for (Field field : fidlds) {
//如果该参数有如下两个参数,则给对应的参数调用set方法,实现注入
if( field.getName().equals("name")){
Method setName = cl.getDeclaredMethod("setName", null);
setName.invoke(obj, null);
}
if(field.equals("age")){
Method setName = cl.getDeclaredMethod("setAge", null);
setName.invoke(obj, null);
}
}
Student stu = (Student)obj;
stu.stuFun();
}
@Test
public void testFactory(){//beanfactory 默认使用的是直接延迟加载,调用的时候才会去加载 桌面应用建议
//创建sping容器
Resource iResource = new ClassPathResource("applicationContext.xml");
BeanFactory iBeanFactory = new XmlBeanFactory(iResource);
}
@Test
public void testApplication(){//applicationContext接口 默认使用的是直接加载,所以在加载的时候会加载全部的bean web应用建议
//创建sping容器
ApplicationContext application = new ClassPathXmlApplicationContext("applicationContext.xml");
}
}
控制反转Ioc:Student是在应用内部创建及维护的,所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的,这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转,不是技术而是一种思想。(将对象的创建全反转到spring容器)
依赖注入Di:在运行期,由外部容器动态地将依赖对象注入到组件中(在对象创建的过程中,将对象的依赖属性通过配置注入)。