Spring(三)SpringIOC

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

这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值