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; } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-05 12:25:23