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;
    }

}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值