Spring(三)SpringIOC

xiaoxiao2021-02-28  126

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实现类中的一段文字。

转载请注明原文地址: https://www.6miu.com/read-34076.html

最新回复(0)