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的配置文件把要引用类和要给类传的参数都放到配置文件里,这样比以前写死在程序里更灵活,因此更具重用性。

转载于:https://www.cnblogs.com/hl756799782/archive/2011/07/18/6005322.html

什么是spring(转载)相关推荐

  1. spring包镜像下载地址

    http://maven.springframework.org/release/org/springframework/spring/ 转载于:https://www.cnblogs.com/vit ...

  2. 【spring基础】spring 官方下载地址

    2019独角兽企业重金招聘Python工程师标准>>> SPRING官方网站改版后,建议都是通过 Maven和Gradle下载,对不使用Maven和Gradle开发项目的,下载就非常 ...

  3. eclipse下的spring环境配置

    1) 工具: (1) jdk (2) spring.jar  .commons-logging-1.1.1.jar (因为只是做的简单的demo,所以就只用这两个jar包) spring.jar 是包 ...

  4. struts2 ibatis Spring系统架构图

    struts2 Ibatis Spring ----------------------------------- 转载于:https://www.cnblogs.com/archie2010/arc ...

  5. spring报错NoClassDefFoundError等与第三方jar包导入问题

    今天配置spring,遇到各种报错的问题,做一个小小总结. 1.刚开始我忘了引入commons-logging,报错.--解决方式:下载并引入该jar包 2.spring以及commons-loggi ...

  6. 使用@Configuration注解来代替Spring的bean配置

    下面是一个典型的Spring配置文件(application-config.xml): 1 2 3 4 5 6 7 8 <beans>          <bean id=" ...

  7. 深入Spring:自定义注解加载和使用

    转自:https://blog.csdn.net/z69183787/article/details/53784845 前言 在工作中经常使用Spring的相关框架,免不了去看一下Spring的实现方 ...

  8. 各个版本spring的jar包以及源码下载地址

    各个版本spring的jar包以及源码下载地址,目前最高版本到spring4.1.2,留存备用: http://maven.springframework.org/release/org/spring ...

  9. Spring安装与入门

    1. Spring组成 Inversion of Control (IoC) Aspect Oriented Programming (AOP) Abstract Service 2. Spring下 ...

  10. Spring学习笔记之二----基于XML的Spring AOP配置

    在Spring配置文件中,通常使用<aop:config>元素来设置AOP,其中应包括: <aop:aspect>指定aspect,aspect是一个POJO类,包含了很多的a ...

最新文章

  1. List集合的去除重复性练习
  2. delphi存取图片
  3. k8s安装prometheus(sealos)解决grafana连接prometheus报错的问题:HTTP Error Bad Gateway
  4. 正则表达式 BRE 与 ERE的区别
  5. ❤️❤️❤️【资料免费领取】简历模板、职场PPT模板、硬核学习资料+PDF资料(Java、Python、大数据、机器学习)❤️❤️❤️
  6. AI算法连载14:统计之模型选择
  7. Luogu 3066 [USACO12DEC]逃跑的BarnRunning Away From…
  8. python编写一个程序、计算字符串中子串出现的次数_急求。。。C语言实现,计算字符串中子串出现的次数,就是先输入一个字符串,再输入一个上面字符串中存在...
  9. [UVALive 3983] Robotruck
  10. data transformation python_Data augmentation: 利用python进行图像扩建
  11. python的安装和运行
  12. [转]老婆还是自己好
  13. android studio for android learning (十八) android事件监听器绑定的方法详解
  14. 5e服务器优化参数,终极优化篇(7700KOC4.8G+1070默认+16GDDR43000)5E练枪图1080P700FPS...
  15. 计算机书籍排版抓图要求,计算机录入与排版
  16. python打包时出现RecursionError: maximum recursion depth exceeded的解决方法
  17. 大数据分析数据来源的有哪些类型
  18. 菜鸡前端面试题整理日记
  19. 做报表到10点才下班,做的还是丑,怎样才能做出一张好看的报表?
  20. JS实现上一个、下一个、置顶、置底操作

热门文章

  1. 编程语言:C语言与Java的细致对比,你知道选谁了吗?
  2. C语言加强学习营(二):定义整型的最大值和最小值
  3. python odoo_Odoo开发教程20-使用 Python 虚拟环境安装 Odoo第二讲
  4. 【渝粤题库】陕西师范大学210015幼儿园社会教育作业(高起专)
  5. 【无标题】物联网安全挑战:为什么企业现在必须评估它们
  6. Wi-Fi和WLAN有什么区别
  7. 物联网将成为第四次工业革命的基石
  8. mave本地导入mysql的jar包_将本地的jar包引入到maven项目中
  9. Verilog二选一数据选择器
  10. java代码上传exel,excle上传服务器并解析!求excel上传到服务器的java代码