课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > Spring学习之Ioc控制反转
  • Spring学习之Ioc控制反转

    发布:昆明Java培训      来源:达内新闻      时间:2016-08-31

  • 昆明Java培训班的老师知道,从开始接触spring起,听到最多的就是Ioc(控制反转)和AOP(面向切面编程)啦。Spring的官方文档给出了这样一个框架图。不过本篇要介绍的所谓的控制反转,就是通过core里面的bean以及context jar包实现 的哦。其他的jar包会在之后的章节中讲到。

    控制反转,也可以称之为依赖注入(dependency injection),指的是当依赖被创建,或从工厂里获得以后,其他类可以通过构造方法,工厂方法,或set方法得到此依赖。通俗一点的说,就是一个类里面依赖的创建及使用,不需要在类本身new出此依赖,只要注入即可使用。举个例 子,我有一辆汽车,需要燃油才能发动,然而我总不能自己去开采燃油,我只需要去加油站加点油,不管你是中石油还是壳牌油,总之油注入进来了,车就可以发动了。这里的燃油就是一个依赖类,这样可以被注入的依赖类,我 们称之为bean,而对bean进行初始化,配置和集成操作的,我们称之为Ioc容器(类似于加油站了)。Ioc容器的编译可以使用xml,Java注解或Java程序来实现。虽然本人更喜欢注解的方式(尤其是使用了Spring Boot),但是入门起见,还是 用xml掌握一下基础知识再根据心情选方式吧~

    那么问题来啦,bean到底是咋配置的呢?下面给出了简单的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.xsd">

    <bean id="..." class="...">

    <!-- collaborators and configuration for this bean go here -->

    </bean>

    <bean id="..." class="...">

    <!-- collaborators and configuration for this bean go here -->

    </bean>

    <!-- more bean definitions go here -->

    </beans>

    这是一段简单的xml代码,可以看到beans里面定义了很多的bean,每个bean都映射到一个类,这些类就是你所要使用的依赖啦。下面我们来看容器和beans是怎么关联的。

    ApplicationContext context =

    new ClassPathXmlApplicationContext(new String[] {"services.xml", "daos.xml"});

    这里的ApplicationContext是context jar包里面的容器接口,它读取了两个xml文件作为容器的配置,来完成各种bean的创建与关联。

    让我们来实际操作一下,首先定义两个xml的文件

    service.xml(service里面有一个依赖叫做petStore,而petStore里面又有两个依赖accountDao和itemDao)

    <?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.xsd">

    <!-- services -->

    <bean id="petStore" class="com.dabingguozi.generaltest.pojo.PetStoreService">

    <property ame="accountDAO" ref="accountDAO"/>

    <property name="itemDAO" ref="itemDAO"/>

    <!-- additional collaborators and configuration for this bean go here -->

    </bean>

    <!-- more bean definitions for services go here -->

    </beans>

    daos.xml(service中petStore所注入的依赖accountDao和itemDao在这里定义)

    <?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.xsd">

    <bean id="accountDAO"

    class="com.dabingguozi.generaltest.pojo.AccountDAO">

    <!-- additional collaborators and configuration for this bean go here -->

    </bean>

    <bean id="itemDAO" class="com.dabingguozi.generaltest.pojo.ItemDAO">

    <!-- additional collaborators and configuration for this bean go here -->

    </bean>

    <!-- more bean definitions for data access objects go here -->

    </beans>

    最后,不要忘记了,在Java里面定义你的三个类(PetStoreService.java, ItemDAO.java, AccountDAO.java注意要包含set方法)和你的主程序(如下)

    public class App {

    public static void main(String[] a){

    ApplicationContext context =

    new ClassPathXmlApplicationContext(new String[] {"daos.xml", "services.xml"});

    // retrieve configured instance

    PetStoreService service = context.getBean("petStore", PetStoreService.class);

    // use configured instance

    List<String> userList = service.getUsernameList();

    System.out.print(userList);

    }

    }

    了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

    推荐文章

上一篇:请求动态资源servlet

下一篇:使用JDBC从数据库中查询数据

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56