码迷,mamicode.com
首页 > 编程语言 > 详细

Spring学习笔记(一)----理解IOC

时间:2015-08-07 20:11:36      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:spring   ioc   

          IOC---控制反转(Inversion of Control),作为Spring核心思想,学习Spring时值得我们需要去关注的一些点大概有以下几点:
          1. 什么是IOC?
                       简单来说,就是对象由容器创建的过程。所谓控制反转就是把对象(bean)和维护对象(bean)之间的关系的权利转移到Spring容器中去了(beans.xml)而程序本身不再维护了。

          2. 那什么是Spring容器,Spring容器是做什么的?
                       Spring容器就是致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的"一站式"选择,并贯穿表现层、业务层及持久层。Spring可以降低各种框架的使用难度,他提供了对各种优秀框架(如Struts、Hibernate、Hessian、Quartz等)的直接支持。

          3. IOC是怎么样实现的?
                       传统的J2SE程序设计,我们都是在程序内部通过new 来创建对象,也就是说主动去创建依赖对象。但是在IOC中,对象都是由IOC容器来给你创建的,那到底是通过怎么样的方式来实现的呢。简单来说就是通过xml 或者注解这两种方式给IOC容器一个通知,然后通过java反射机制去创建bean。

          4. IOC容器具体创建对象的方式有哪几种?
                       a). 通过构造方法实例化。这就需要在xml 中配置的元数据制定的class 需要提供一个默认的空构造方法。
                             
<span style="font-size:14px;"><bean id="exampleBean" class="examples.ExampleBean"/></span>

                       b). 通过态工厂方法实例化。当然通过静态工厂方法实例化得到的是一个单例(singleton)的对象。
                              首先在beans.xml 中需配置:
<bean id="clientService"
    class="examples.ClientService"
    factory-method="createInstance"/>
                               静态工厂类:
public class ClientService {
    private static ClientService clientService = new ClientService();
    private ClientService() {}

    public static ClientService createInstance() {
        return clientService;
    }
}
        
                       c). 通过实例工厂实例化。        
                               xml配置:
<!-- the factory bean, which contains a method called createInstance() -->
<bean id="serviceLocator" class="examples.DefaultServiceLocator">
    <!-- inject any dependencies required by this locator bean -->
</bean>

<!-- the bean to be created via the factory bean -->
<bean id="clientService"
    factory-bean="serviceLocator"
    factory-method="createClientServiceInstance"/>
                               实体工厂类:
public class DefaultServiceLocator {

    private static ClientService clientService = new ClientServiceImpl();
    private DefaultServiceLocator() {}

    public ClientService createClientServiceInstance() {
        return clientService;
    }
}
                              实体工厂可以持有超过一个工厂方法:
                              xml配置:
<bean id="serviceLocator" class="examples.DefaultServiceLocator">
    <!-- inject any dependencies required by this locator bean -->
</bean>

<bean id="clientService"
    factory-bean="serviceLocator"
    factory-method="createClientServiceInstance"/>

<bean id="accountService"
    factory-bean="serviceLocator"
    factory-method="createAccountServiceInstance"/>
                               实体类:
public class DefaultServiceLocator {

    private static ClientService clientService = new ClientServiceImpl();
    private static AccountService accountService = new AccountServiceImpl();

    private DefaultServiceLocator() {}

    public ClientService createClientServiceInstance() {
        return clientService;
    }

    public AccountService createAccountServiceInstance() {
        return accountService;
    }

}






版权声明:本文为博主原创文章,未经博主允许不得转载。

Spring学习笔记(一)----理解IOC

标签:spring   ioc   

原文地址:http://blog.csdn.net/wild_elegance_k/article/details/47339909

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!