Spring(三)SpringIOC
来源:互联网 发布:健美创研化妆品知乎 编辑:程序博客网 时间:2024/06/05 11:45
SpringIOC讲解
IOC(Inversion of Control)即控制器反转,主要有以下两部分:
(1)控制:是javaBean与javaBean之间的关系不需要开发人员维护,而交给spring容器维护。关系包括引用关系继承关系,javaBean是类,接口不是javaBean。
(2)反转:用户在创建和使用对象时不需要自己创建和使用对象,而是由spring帮助我们创建对象,用户直接拿来使用spring创建好的对象。
在Spring中,那些组成你应用程序的主体(backbone)及由Spring IoC容器所管理的对象,被称之为bean。 简单地讲,bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。 而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。
IoC容器负责容纳此前所描述的bean,并对bean进行管理。org.springframework.beans.factory.BeanFactory 是Spring IoC容器的实际代表者,在Spring中,BeanFactory是IoC容器的核心接口。 它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。Spring为我们提供了许多易用的BeanFactory实现, XmlBeanFactory就是最常用的一个。该实现将以XML方式描述组成应用的对象 以及对象间的依赖关系。XmlBeanFactory类将获取此XML配 置元数据,并用它来构建一个完全可配置的系统或应用。容器是xml文件,通过读取xml中的Bean来实现类的初始化,需要有读取javaBean的接口或者对象如:BeanFactory接口主要用来实例化容器中的javaBean。
反转的演示
1.src下新建配置文件application.xml,也可以在WEB-INF中创建,该配置文件用来描述、管理、实例化javaBean。在配置文件对实体类(javaBean)描述中的property标签于类中的set方法的功能相同,一般情况下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-2.5.xsd"> //class属性:javabean的全名,id:bean的标识,每个bean通过它来区别 // scope属性:如何来实例化对象的默认是单例,还有prototype:原型模式 <bean id="dept" class="com.spring.entity.Dept" scope="Singleton" > <property name="id" value="1"></property> <property name="dname" value="鸡蛋"></property> </bean></beans>
2.在控制器里面使用实体类。创建一个Test方法,运用Junit进行测试,得到要使用的bean首先要拿到配置文件,其次通过id拿到bean,此时就可以在不new对象的情况下使用该bean了。
import org.junit.Test;import org.springframework.beans.factory.BeanFactory;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.spring.entity.Dept;public class OneController { @Test public void Test(){ //获得容器 BeanFactory beanFactory=new ClassPathXmlApplicationContext("applicationContext.xml"); //根据id获得对应的Bean Dept dept=(Dept)beanFactory.getBean("dept"); System.out.println(dept.getId()+dept.getDname()); }}
控制的演示
1.dao层中创建一个接口,包含一个返回值为void的方法。
package com.spring.dao;public interface DeptDao { void findDept();}
2.创建实现dao接口的类,重写其方法,方法中输出一段文字即可。
package com.spring.dao;public class DeptDaoImp implements DeptDao{ @Override public void findDept() { System.out.println("testIoc"); }}
3.Service层,创建一个接口包含一个返回值为void的方法。
package com.spring.service;public interface DeptService { void findDept();}
4.创建一个service接口的类,类中包含一个dao接口类型的属性,实现接口的方法,该方法的内容是调用dao层的方法。
package com.spring.service;import com.spring.dao.DeptDao; public class DeptServiceImp implements DeptService{ private DeptDao deptDao; public void setDeptDao(DeptDao deptDao) { this.deptDao = deptDao; } @Override public void findDept() { deptDao.findDept(); }}
5.控制器层,创建一个类,类中包含一个Service接口类型的成员变量,创建一个返回值为空的方法,在方法中调用接口的方法,创建main函数,其中包括获取控制层的bean和调用该bean的方法。
package com.spring.controller;import org.springframework.beans.factory.BeanFactory;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.spring.service.DeptService;public class OneController { private DeptService deptService; public void findDept(){ deptService.findDept(); } public void setDeptService(DeptService deptService) { this.deptService = deptService; } public static void main(String[] args) { BeanFactory beanFactory=new ClassPathXmlApplicationContext("applicationContext.xml"); //根据id获得对应的Bean OneController oneController=(OneController)beanFactory.getBean("oneController"); oneController.findDept(); }}
6.目前所做的步骤中,在service层中引用了dao层,控制器中引用了service层,同时也用到其中的方法。以往的方法需要将这些引用的对象通过new出来才能用,这些接口的实例化都需要自己做得。而spring完成时只需要添加一个接口类型的属性,并书写其set方法,再将每一层的接口的实现类配到容器中,这样使得层与层之间的耦合度降低。在容器中配置。
<bean id="deptDao" class="com.spring.dao.DeptDaoImp"></bean> //ref的值是该类中引用到的bean在配置文件中的id值 <bean id="deptService" class="com.spring.service.DeptServiceImp"> <property name="deptDao" ref="deptDao"></property> </bean> <bean id="oneController" class="com.spring.controller.OneController"> <property name="deptService" ref="deptService"></property> </bean>
7.Web.xml将application.xml配置到其中
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param>
8.运行main方法,可以看到控制台中输出了dao实现类中的一段文字。
- Spring(三)SpringIOC
- SpringIoC依赖注入的过程(三)
- Spring框架之SpringIoc容器(一)
- spring学习1 springIOC的三种注入方式
- springIOC源码解析(三)
- Spring笔记之SpringIOC
- Spring学习记录一(SpringIOC容器初级)
- 菜鸟学习Spring——SpringIoC容器基于三种配置的对比
- springIOC容器(一)
- springIOC容器(二)
- springIOC理解(一)
- springIoC
- springIoc
- SpringIOC
- springIOC
- springIOC
- springIOC
- SpringIOC
- -----String s = new String("xyz");创建了几个String Object? 二者之间有什么区别?
- android应用中去掉标题栏
- GHGL项目最后总结
- CocoaPods安装出现SSL verification error
- 【PAT】【Advanced Level】1046. Shortest Distance (20)
- Spring(三)SpringIOC
- 【笔记】jQuery插件的开发模式
- 同余最短路
- 笨办法学 Python · 续 练习 3:质量
- Android ContentProvider之读取、添加联系人
- 通过源码详解 Servlet
- 看一遍就会的CocoaPods的安装和使用教程
- RESTful API 设计指南
- 输入一个5X5的二维数组,将数组进行排序,其中一维数组按照平均值降序,一维数组内部升序排列。