`
wwty
  • 浏览: 543705 次
  • 性别: Icon_minigender_1
  • 来自: 北京-郑州
社区版块
存档分类
最新评论

spring的ioc的深入理解

阅读更多

前面总结了什么是spring的ioc,以及是如何实现的,最后的总结使用spring的好处是:

1、我们自己编写的组件并不需要实现框架指定的接口(这里指的框架是spring框架),因此可以轻松的将组件从spring中脱离,甚至不需要任何修改。
2、组件间的依赖关系减少,极大的改善了代码的可重用性。spring的依赖注入机制,可以在运行期为组件配置所需资源,而无需在编写组件代码时就加以指定,从而在相当程度上降低了组件之间的耦合。

 

第一点好处是实实在在的,确实,在基于spring开发的过程中,和spring框架本身的耦合是非常小的,或者说没有。

第二点更直接的来说,spring利用配置或者注解来进行对象的管理,将对象注入到ioc容器当中,然后从这个容器当中去取对象,而不是硬编码去获取一个具体的对象。这样当需要换当前的对象为实现了相同接口的另外一个对象时,代价是很小的。只需要将另外一个对象的类注册入ioc容器,然后在代码中,比如之前为:

 

ApplicationContext ctx = new FileSystemApplicationContext("bean.xml");  
Action a = (Action)ctx.getBean("TheAction");  
System.out.println(a.excute("Rod Johnson"));  

 

 换成实现了相同接口的另外一个对象:

ApplicationContext ctx = new FileSystemApplicationContext("bean.xml");  
Action a = (Action)ctx.getBean("TheSecondAction");  
System.out.println(a.excute("Rod Johnson"));  

 这样就ok了。

 

在jdk1.5之后,java开始支持注解,有了注解之后,spring针对bean的管理更加方便,更加灵活。

比如我指定了一个特定的service规范如下:

package com.myorg.springmvctutorial.web.service;

import com.myorg.springmvctutorial.web.model.Customer;


public interface CustomerService {
	
	void insert(Customer customer)throws Exception;
}

 针对本规范的具体实现有如下两个具体类:

CustomerServiceImpl

@Service("test2")
public class CustomerServiceImpl implements CustomerService{
	
	@Autowired
	private CustomerDAO customerDAO;
	
	@Override
	@Transactional
	public void insert(Customer customer)throws Exception {
		customerDAO.insert(customer);
	}
}

 CustomerServiceImpltest

@Service("test1")
public class CustomerServiceImpltest implements CustomerService{
	
	@Autowired
	private CustomerDAO customerDAO;
	
	@Override
	@Transactional
	public void insert(Customer customer)throws Exception {
		customerDAO.insert(customer);
	}
}

 

当然在使用之前,是需要将其注册如spring的ioc容器的,具体注册就不在此处将了,不是本文的重点。

在controller当中的具体使用:

	@Autowired
	@Qualifier("test2")
	private CustomerService customerService;

	@RequestMapping(value="/create")
	public String create(Customer customer,Model model) throws Exception{
		if(customer==null){
			model.addAttribute(new Customer());
			return "insertCustomer";
		}
		System.out.println(customer.getName());
		System.out.println(customer.getAge());
		customerService.insert(customer);
		return "insertCustomer";
	}

 

当同一个接口有多个具体实现时,有两个关键的注解@Service和@Qualifier。

首先需要为每个service加上名字,然后在controller当中使用时,用@Qualifier指定具体使用哪个service实现。

 

首先基于注解之后,spring针对service bean和dao bean等bean的配置减少了很多。同时基于注解,如果需要根据具体业务需求去换成实现了相同的接口的另外一个对象时,是非常简单的,按照上例,只需要将controller当中的

@Qualifier("test2")

 改为

@Qualifier("test1")

 即ok。

 

所以基于ioc容器进行对象管理,确实从很大程度上减少了组件之间的依赖关系。代码之间的耦合度也非常底,从上面的service从test2”转变为“test1”就可以清楚的看到。

分享到:
评论

相关推荐

    spring ioc

    标签 "源码" 暗示我们将深入 Spring 框架的内部,了解 IOC 容器的工作原理。Spring 源码是用 Java 编写的,遵循模块化的架构。当我们谈论源码时,可能会关注以下几个关键点: 1. `BeanDefinition`:每个 Bean 在...

    SpringIOC经典Demo

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它极大地简化了Java应用的开发,通过将对象的创建...通过学习和理解这个项目,你可以深入掌握Spring IOC的核心原理,并将其应用到自己的项目中。

    Spring IoC源码深度剖析开源架构源码2021.pdf

    标题《Spring IoC源码深度剖析开源架构源码2021.pdf》和描述《Spring IoC源码深度剖析开源架构源码2021.pdf》表明该文档主要面向于分析Spring框架中控制反转(IoC)容器的核心源码,解析和理解其内部的工作机制及...

    Java反射_Spring IOC

    通过阅读这本书和实践提供的JAVA+Spring示例代码,初学者可以深入理解Java反射的原理和Spring IOC的实际应用,从而提高编程技能,更好地应对复杂的项目需求。在学习过程中,务必理论与实践相结合,加深理解,这样...

    手写spring ioc(三) 资源org.zip

    总的来说,手写Spring IOC是一个深入理解和实践IoC设计模式的好方法,它能帮助开发者更深入地了解Spring框架的工作原理,提高对依赖注入和对象管理的理解。通过这个过程,我们可以更好地掌握如何在实际项目中应用...

    springioc的详细讲解

    Spring IOC,全称为Inversion of Control,即控制反转,是Spring框架的核心特性...理解并熟练运用Spring IOC容器是掌握Spring框架的关键。通过阅读提供的"Spring_IOC_.pdf"文档,你可以深入学习和掌握这些概念和技术。

    Spring IOC容器实现分析.pdf 下载

    本文将深入剖析Spring的IOC容器,理解其工作原理和重要功能,以帮助开发者更好地利用这一强大的工具。 一、IOC容器的概念 IOC,即控制反转,是面向对象编程中的一个设计原则,它的主要思想是将对象的创建和管理权...

    以注解方式模拟Spring IoC AOP

    本篇将深入探讨如何通过注解方式来模拟Spring的这两种机制,帮助你理解其底层原理。 ### 1. 依赖注入(IoC) 依赖注入是Spring框架的核心特性之一,它通过反转对象创建和管理的控制权,使得应用程序组件之间的耦合...

    模拟spring ioc过程

    通过实践,你可以深入了解Spring如何管理对象的生命周期,如何通过依赖注入来降低耦合,以及如何利用面向切面编程来实现代码的模块化和解耦。这些技能对于任何Java开发者来说都是至关重要的,尤其是在大型企业级应用...

    Spring IOC源码解读

    Spring IOC,即Inversion of Control(控制反转),是Spring框架的核心特性之一,它负责管理和装配应用程序中的对象。...理解并掌握Spring的IOC源码,对于深入学习Spring框架以及提升系统设计能力具有重要意义。

    实验四_SpringIoC.rar

    在这个实验中,我们将深入理解并实践Spring IoC的核心概念。 IoC是Spring的核心特性,它帮助开发者摆脱了对对象创建和管理的直接控制,转而由框架来负责。通过这种方式,我们可以更专注于业务逻辑,而不是对象的...

    spring ioc+mvc代码

    《深入理解Spring IOC+MVC:从零构建自己的框架》 在软件开发领域,Spring框架因其强大的功能和灵活性而备受推崇,特别是其核心的控制反转(IOC)和模型视图控制器(MVC)设计模式。本文将通过分析并实现一个简化版...

    Spring ioc源码解读

    通过对Spring IoC容器的理解和源码分析,我们可以深入了解到Spring框架是如何管理和控制应用对象的生命周期及依赖关系的。在实际开发中,了解Spring IoC容器的工作原理有助于更好地利用Spring框架,提高开发效率和...

    JavaEE spring IoC入门案例

    JavaEE Spring 框架是企业级应用开发的首选之一,尤其在控制反转(Inversion of Control, 简称IoC)和依赖注入(Dependency ...深入理解和运用这些知识点,可以让你在实际项目中编写出更加健壮、易维护的代码。

    模拟spring IOC非常好的事例

    下面我们将深入探讨这个"模拟spring IOC非常好的事例"所涵盖的知识点。 首先,我们需要理解什么是IOC。IOC是一种设计模式,它的主要思想是将对象的创建和管理权交给一个外部容器,而不是由对象自身来负责。这样可以...

    Spring-ioc-jar

    Spring IOC,全称为Inversion of Control,中文常被称为“控制反转”,是Spring框架的核心...在这个过程中,"Spring-ioc-jar"中的类和接口是实现这些功能的基础,深入研究其内部实现将有助于提升你的Spring开发技能。

    Spring IoC简单示例-注解配置-Maven构建

    在本文中,我们将深入探讨Spring框架的核心特性——控制反转(Inversion of Control,简称IoC)和依赖注入(Dependency Injection,简称DI),以及如何通过注解配置和Maven项目构建来实现这一概念。Spring框架是Java...

    反射模拟springIOC.rar

    1. **配置文件解析**:在`springIOC_0602`项目中,我们有一个XML配置文件,它定义了bean的声明和它们的依赖。JDOM库被用来读取这个文件,解析bean的定义,包括bean的类名、属性、依赖等。 2. **Bean的创建**:解析...

    spring IOC

    关于【源码】,深入理解Spring的IOC源码可以帮助我们更好地掌握其实现原理。Spring采用工厂模式创建Bean,同时使用反射和CGLIB动态代理技术来处理对象的实例化和依赖注入。当我们声明一个Bean时,Spring会通过反射...

Global site tag (gtag.js) - Google Analytics