`
hl756799782
  • 浏览: 77780 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

什么是spring(转载)

阅读更多

spring是一个开源的java框架,集成了各种主流的技术包括web mvc,orm,ejb,rmi,javamail等 ,他就象一个粘合济,在实际项目中,将前后台程序粘合在一起,构建出一个完整的系统。

spring中的各个组件也可独立使用,你可以在你的项目中选择性的使用spring提供的某一部分功能

Spring的核心是ioc和aop

什么是IOC

Inversion of Control,控制反转或反转控制,其和另外一个概念DI-Dependency Injection依赖注入等价。

到底如何来理解IOC?

IOC确切的说,他是一种思想、概念,跟OOP是一种编程思想一样,他是在大量的项目实践中总结出来的一种精妙地程序设计思想。在原先的程序设计中,我们通常是通过new XXX(),其中,XXX就是某个类的名称,在没有ioc思想引入时,我们程序中大量充斥着new XXX()这样的代码。这些代码都需要我们程序员手工编写。而引入了ioc思想之后,对象的管理全部交给Spring这个容器来管理,当我们程序需要对应类的对象时,我们直接从Spring容器里面获取,换句话说,就是Spring容器把产生好的对象交给了我们的程序,这种方式就叫做注入(就跟医生拿着可怕的针管将液体注入到我们的屁股上一样,为什么要注入,还不是你的屁股需要嘛!因为你需要,所以我给你,这就是DI)

而IOC的深层含义就是,将原先对象产生的主动权交给了Spring容器,由Spring容器来为我们完成对象的new的过程,并将对象在我们需要时交给我们。

Spring正是IOC思想的一个完美产物和实践者!

什么是aop

Aspect Oriented Programming,面向方面编程,它也是一种编程思想,它是对OOP编程思想的一种升华
OOP强调的是对象,而aop强调的是面(不是饺子)

那么,什么是面?

如果拿我们的教室做比方,那么教室的前门和后窗就是一个面,一个截面,通过这样的截面,将我们这块空间分成了室内、窗外和门外三部分。

如果拿我们吃的汉堡做比方,那么汉堡的夹心的前后就是一个面,一个截面,通过这样的截面,将我们的普通面包分成了面包上层、夹心、面包下层。

如果。。。

还是拿我们的程序代码来说,
如果我们的dao用jdbc实现,那么在dao的每一个方法里都充斥着这样的代码,
打开连接
执行sql语句
关闭连接
那么,这时,我们就可以在执行sql前后做出一个截面,通过这样的截面,将我们的程序代码分开,将打开连接和关闭连接交给AOP去做,我们程序员只关注执行不同sql语句部分,避免了在dao的每个方法中都要编写重复的打开连接和关闭连接代码。

如果我们的dao用hibernate实现,那么在dao的每一个方法里都充斥着这样的代码
打开session
执行session动作
关闭session

同理,我们就可以在执行session动作前后做出一个截面,通过这样的截面,将我们的程序代码分开,将打开session和关闭session交给AOP去做,我们程序员只关注执行session动作,避免了代码的重复岂不更好

这就是AOP,好好理解吧,那可是个漫长的思想体验过程!祝你好运!

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

最近在网上看到很多人提问,关于spring 依赖注入有什么好处 ?以下是某人说的一句话:"我看了,好处就是说,如果某一天实现类变了,在xml里改一下就行了,可是用原始的java new关键字,我也可以改实现类,只要把new后面的类改掉就行,改xml和改java,工作量是一样的,没看出有啥好处,这个传说中的注入的好处,没感觉到啊"

        看到这,我觉的对刚学spring的朋友都有这样的误解,其实不是这样的。以下通过例子来说明下spring 依赖注入的好处

  

public interface PersonDao {

 public void add();

}

创建一个PersonDao对象
public class PersonDaoBean implements PersonDao {
 public void add(){
  System.out.println("执行PersonDaoBean里的add()方法");
 }
}

 


public class PersonServiceBean implements PersonService {    
    private PersonDao personDao;    
        
    public PersonDao getPersonDao() {    
        return personDao;    
    }    
   
    public void setPersonDao(PersonDao personDao) {    
        this.personDao = personDao;    
    }    
        
    public void save(){    
        personDao.add();    
    }    
}

 

<?xml version="1.0" encoding="UTF-8"?>   
<beans xmlns="http://www.springframework.org/schema/beans"   
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
       xsi:schemaLocation="http://www.springframework.org/schema/beans    
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">   
           <bean id="personDao" class="cn.itcast.dao.impl.PersonDaoBean"></bean>   
          <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean">   
            <property name="personDao" ref="personDao"></property>   
          </bean>   
</beans> 

 

大家可以看到,在服务层的这个类里面,我们并没有看到PersonDaoBean的身影,也就是说我们并不关心这个实现类是谁,我们通过PersonDao这个接口去引用注入进来的对象,在通过接口调用它的方法。这样的话,服务层的组件和DAO层的组件已经进行彻底的解耦了。

 

依赖注入或者说是控制反转,说白了就是使用了配置文件,这种思想的唯一好处就是增加了模块的重用性灵活性。一般配置文件里存的都是数据,键值之类的。Spring的配置文件把要引用类和要给类传的参数都放到配置文件里,这样比以前写死在程序里更灵活,因此更具重用性。

分享到:
评论

相关推荐

    转载Spring-01

    转载Spring-01

    (转载)自己动手写一个spring

    首先,我们需要理解什么是依赖注入。在传统的编程模式中,对象通常会自行创建或查找它们依赖的对象,这导致了代码间的紧密耦合。Spring通过DI将这种耦合度降低,使得组件之间的关系由外部容器管理,而不是由组件自身...

    Spring + Quartz配置实例(转载)

    标题 "Spring + Quartz配置实例(转载)" 暗示了我们将讨论如何在Java环境中整合Spring框架与Quartz作业调度库的使用。Quartz是一个开源的作业调度库,它允许开发者安排任务以在特定时间执行,而Spring框架则是一个...

    Ehcache集成Spring的使用(转载)

    这篇博客将深入探讨如何将 Ehcache 集成到 Spring 应用中,以及如何使用 Spring AOP 实现计算结果的缓存。 首先,集成 Ehcache 到 Spring 需要以下步骤: 1. **引入依赖**: 在 Maven 或 Gradle 的配置文件中添加 ...

    Spring Security3中文文档

    文档的翻译者lengyun3566在博客中提到,他翻译了Spring Security3的文档,并在每篇文章的开头强调了版权信息,要求转载时必须注明出处。这表明了作者对知识产权的尊重以及对读者的责任感。 ### 第一章:Spring ...

    Spring api

    助于刚学Spring 的开发者使用,自主学习,Spring中文...在完整保留全部文本包括本版权页,并不违反Apache 2.0协议的前提下,允许和鼓励任何人进行全文转载及推广。我们在此宣布所有参与人员放弃除署名权外的一切权利。

    Spring Microservices azw3

    Spring Microservices 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Spring 5.0 Cookbook Recipes to build, test, and run Spring applications azw3

    Spring 5.0 Cookbook Recipes to build, test, and run Spring applications efficiently 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Beginning Spring Boot 2 Applications and Microservices with the Spring epub

    Beginning Spring Boot 2 Applications and Microservices with the Spring Framework 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    JAVA OA平台源码(转载)SPRING BOOT....

    【标题】:“JAVA OA平台源码(转载)SPRING BOOT...” 这个开源项目是一个基于Java技术的OA(Office Automation)管理系统的源代码实现,利用了Spring Boot框架进行开发。Spring Boot是Spring生态中的一个核心组件...

    SpringCloud注解详情XMind文件.zip

    版权声明:本文为CSDN博主「我又不是超人fzx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/fzx_tomcat/article/details/84851925

    spring源代码解析

    – 为什么会有两个不同的类来装载它呢,这是因为它们的使用需要区别不同的Servlet容器支持的Serlvet版本。但不管是 ContextLoaderSevlet还是 ContextLoaderListener都使用ContextLoader来完成实际的...

    Learning Spring 5.0 epub

    Learning Spring 5.0 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Spring MVC Cookbook epub

    Spring MVC Cookbook 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Spring 5 Design Patterns azw3

    Spring 5 Design Patterns 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Learning Spring 5.0 mobi

    Learning Spring 5.0 英文mobi 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Mastering Spring Cloud epub

    Mastering Spring Cloud 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书

    Mastering Spring Cloud mobi

    Mastering Spring Cloud 英文mobi 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书

    Spring Integration Essentials epub

    Spring Integration Essentials 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书

Global site tag (gtag.js) - Google Analytics