`
wwty
  • 浏览: 537213 次
  • 性别: 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”就可以清楚的看到。

分享到:
评论

相关推荐

    IOC之深入理解SpringIoC

    理解好它的关键在于我们需要回答如下四个问题:谁控制谁控制什么为何是反转哪些方面反转了在回答这四个问题之前,我们先看IOC的定义:所谓IOC,就是由SpringIOC容器来负责对象的生命周期和对象之间的关系上面这句话...

    SpringIoC的简单实现

    我们从一个简单的容器开始,一步步的重构,最后实现一个基本的Spring框架的雏形,为了帮助我们更加深入的理解Spring的IoC的原理和源码。 详细内容见博文: 【SSH进阶之路】一步步重构容器实现Spring的IoC——从一个...

    深入解析Spring IoC源码:核心机制与实践应用

    本文深入探讨了Spring框架中IoC容器的源码机制,涵盖了容器的初始化、Bean工厂的实例化、Bean定义的读取及Spring ...适合拥有一定Spring框架基础的开发者阅读,特别是那些希望深入理解框架内部工作原理的高级开发人员。

    深入解析Spring IoC:源码与实践指南

    Spring框架的核心在于其强大的IoC(控制反转)机制,该机制为Java应用...这些深入的分析不仅有助于理解Spring的内部工作机制,而且对于Java开发者来说,能够更好地掌握如何有效地使用Spring框架进行高效的编程实践。

    ioc AOP深入了解

    ioc 及aop 使用基础 与spring结合

    Spring IoC功能例子详解.docx

    深入理解 IoC 这里用经典 class Rectangle 来举例: 两个变量:长和宽 自动生成 set() 方法和 toString() 方法 注意 :一定要生成 set() 方法,因为 Spring IoC 就是通过这个 set() 方法注入的; ...

    深入理解java的spring-ioc的使用.docx

    深入理解java的spring-ioc的使用.docx

    Spring技术内幕:深入解析Spring架构与设计原理

    一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...

    一步步深入理解Spring内部原理-带源码

    用一个小项目模拟出一个微型的spring项目,实现spring的核心功能-aop,ioc和自动注入,帮助初学者了解spring的运行原理,以后面试再也不怕碰到问spring原理的问题了

    深入理解java的spring-ioc的使用

    主要介绍了java的spring-ioc的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Spring技术内幕:深入解析 Spring架构与设计原理.pdf

    第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...

    深入解析SPRING架构与设计原理-第二版

    《深入理解Java虚拟机 JVM高级特性与最佳实践 第2版 .pdf》《深入浅出MyBatis技术原理与实战.pdf》、《MySQL技术内幕 InnoDB 第2版》、《Java并发编程的艺术.pdf》等,看后满意的话请给个5星评价吧。

    Spring技术内幕:深入解析Spring架构与设计原理(第2版)

    第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的JavaEE组件在Spring和的实现原理,第三部分讲述了ACEGI安全框架、DM模块以及Flex...

    SPRING技术内幕:深入解析SPRING架构与设计原理

    第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...

    Spring技术内幕:深入解析Spring架构与设计原理(第2版) 决战大数据时代!IT技术人员不得不读! 计文柯 著

    一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...

    Spring框架的简单实现

    我们从一个简单的容器开始,一步步的重构,最后实现一个基本的Spring框架的雏形,为了帮助我们更加深入的理解Spring的IoC的原理和源码。 详细内容见博文: 【SSH进阶之路】一步步重构容器实现Spring框架——从一个...

    Spring技术内幕 - 深入解析Spring架构与设计原理.rar

    深入理解spring原理,详细介绍了IOC、AOP等基本原理与实现,解析源代码,值得推荐!

    Spring技术内幕:深入解析Spring架构与设计原理(第2版)

    第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的JavaEE组件在Spring和的实现原理,第三部分讲述了ACEGI安全框架、DM模块以及Flex...

    深入解析Spring架构与设计原理

    第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的JavaEE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...

Global site tag (gtag.js) - Google Analytics