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通过DI将这种耦合度降低,使得组件之间的关系由外部容器管理,而不是由组件自身...
标题 "Spring + Quartz配置实例(转载)" 暗示了我们将讨论如何在Java环境中整合Spring框架与Quartz作业调度库的使用。Quartz是一个开源的作业调度库,它允许开发者安排任务以在特定时间执行,而Spring框架则是一个...
这篇博客将深入探讨如何将 Ehcache 集成到 Spring 应用中,以及如何使用 Spring AOP 实现计算结果的缓存。 首先,集成 Ehcache 到 Spring 需要以下步骤: 1. **引入依赖**: 在 Maven 或 Gradle 的配置文件中添加 ...
文档的翻译者lengyun3566在博客中提到,他翻译了Spring Security3的文档,并在每篇文章的开头强调了版权信息,要求转载时必须注明出处。这表明了作者对知识产权的尊重以及对读者的责任感。 ### 第一章:Spring ...
助于刚学Spring 的开发者使用,自主学习,Spring中文...在完整保留全部文本包括本版权页,并不违反Apache 2.0协议的前提下,允许和鼓励任何人进行全文转载及推广。我们在此宣布所有参与人员放弃除署名权外的一切权利。
Spring Microservices 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
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 Framework 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
【标题】:“JAVA OA平台源码(转载)SPRING BOOT...” 这个开源项目是一个基于Java技术的OA(Office Automation)管理系统的源代码实现,利用了Spring Boot框架进行开发。Spring Boot是Spring生态中的一个核心组件...
版权声明:本文为CSDN博主「我又不是超人fzx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/fzx_tomcat/article/details/84851925
– 为什么会有两个不同的类来装载它呢,这是因为它们的使用需要区别不同的Servlet容器支持的Serlvet版本。但不管是 ContextLoaderSevlet还是 ContextLoaderListener都使用ContextLoader来完成实际的...
Learning Spring 5.0 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Spring MVC Cookbook 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Spring 5 Design Patterns 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Learning Spring 5.0 英文mobi 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Mastering Spring Cloud 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
Mastering Spring Cloud 英文mobi 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
Spring Integration Essentials 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书