控制反转将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。
控制反转是一个概念,一种思想,依赖注入方式更为广泛,依赖注入是一种实现方式,程序代码不做定位查询,这些工作由容器自行完成。
下载框架的网站
http://repo.spring.io/simple/libs-release-local/org/springframework/spring/
导入jar包
https://mvnrepository.com/ 此网站可以查找对应jar包下载
com.springsource.org.apache.commons.logging-1.1.1
com.springsource.org.apache.log4j-1.2.15
junit-4.9
spring-beans-4.2.1.RELEASE
spring-context-4.2.1.Release
spring-core-4.2.1.RELEASE
spring-expression-4.2.1.RELEASE
在eclipse中新建工程,在primary中新建folder,取名lib导入这些包,接着buildpath一下
????? 接口 对象 =new 实现类
使用spring需要创建配置文件 applicationContext 应用上下关系,有了xml就需要约束
复制 http://www.springframework.org/schema/beans/spring-beans.xsd
添加提示:window->preferences->查找xml->xml Catalog->User specifiled Entries
->add->引入schema\beans\spring-beans-4.2.xsd
配置好文件,然后容器自己创建
@Test
public void test02() {
// 加载Spring配置文件,创建Spring容器对象
// 这里的配置文件存放在类路径src下
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
// 从容器中获取指定的bean对象
ISomeService service = (ISomeService) ac.getBean("someService");
service.doFirst();
service.doSecond();
}
发现测试成功,抛出问题,那是什么时候开始创建的呢?在实现类中添加无参构造器,右键source选择Generate Constructors from Superclass创建,然后使用debug文件测试,发现在创建spring容器的时候就已经执行,容器初始化所有对象全部创建好,创建好之后获取即可。
@Test
public void test04() {
// 这个容器中的对象不是在容器初始化时创建的,而是在真正使用时才创建
BeanFactory bf = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
// 从容器中获取指定的bean对象
ISomeService service = (ISomeService) bf.getBean("someService");
service.doFirst();
service.doSecond();
}
两种方法对比,applicationContext容器的效率快,但是占内存。bean工厂不占内存,但是效率较慢,在现阶段考虑web应用的速度响应问题,优先考虑前者。
网友评论