【Spring开发】—— Spring Core
前言
最近由于一些工作的需要,还有自己知识的匮乏再次翻开spring。正好整理了一下相关的知识,弥补了之前对spring的一些错误认知。这一次学习,更加深入的理解了Ioc和AOP的思想,并对其架构模块有了更深一步的理解。
刚开始翻看spring技术内幕,虽然有了一点看源码的经验,但是直接看如此深的源码,还是很头疼。spring由于业务的扩展,以及用户群的增加,对于某些模块的类封装的很深!因此追溯源码是个很头疼的问题,而直接看这本书,也是压力山大。
于是回去复习一下spring的基本知识,先学会走,在学跑。
先说说spring的核心模块相关的概念,IOC和AOP。
IoC(inversion of control)控制反转,也就是说,控制权由对象转移,对象自己变成了被动的接受。
DI(dependency injection)依赖注入
AOP(aspect oriented programming)面向切面编程
先简单的说说这个AOP
AOP中利用面向切面的编程理论,把每个方法或者函数当做一个切面,在这个切面前后都可以执行不同的方法。
<bean id="service">
<property name="interceptorNames" value="advisor"></property>
<property name="target">目标</property>
</bean>
这里定义了一个拦截器,一个目标bean。
<bean id="advisor" class="...">
<property name="advice">//拦截器对象
</property>
<property name="mappedName">//拦截的方法
</property>
</bean>
这个目标bean在执行时,会根据配置来确定切面,精确到某个方法。而拦截的方法由上面的mappedName确定,可以通过名字或者通过正则表达式来确定。拦截器对象确定了拦截时触发的函数。
可以进行方法前拦截、方法后拦截、异常拦截。

可以看到Spring Core是spring框架中最低层核心的模块。提供了最基本的Ioc思想框架。
下面讲解一下如何使用!
由于spring是把一个类配置在xml配置文件中,从而进行一些相关的依赖或者注入等等。那么这个配置文件,肯定要被本地化存储并且进行读取。
因此在我们使用前,要进行三步:
读取spring配置文件
bean定义
注入到Ioc容器
之后我们就可以通过bean工厂的getBean获取指定的bean了。
1 最常见的读取配置文件的三种方法:
1 利用ClassPathResource读取资源文件,传入XmlBeanFactory中
ClassPathResource res = new ClassPathResource("application.xml")
XmlBeanFactory factory - new XmlBeanFactory(res);
factory.getBean("testBean");
2 利用输入流,传入到XmlBeanFactory中
InputStream is = new FileInputStream("C:\\ApplicationContext.xml");
XmlBeanFactory factory - new XmlBeanFactory(is);
3 直接通过ClassPathXmlApplicationContext读取资源文件
ClassPathXmlAppliationContext appContext = new ClassPathXmlApplicationContext("aaplicationContext.xml");
4 通过在web.xml中指定配置文件的目录,自动读取。关于配置文件的路径有很多种写法,通过指定ClassPath也可以。
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener> <context-param>
<param-name> contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/bean.xml
</param-value>
</context-param>
2 Bean的定义这部分就没什么好说的了,就是读取配置文件,解析里面的文件定义,抽取成数据模型。
3 而注入到Ioc容器中,就是把这个数据模型读取到一个总的BeanFactory中,统一的进行管理。
我们就可以通过这个BeanFactory进行一些操作,比如GetBean()或者containsBean()等等。
杂七杂八
下面简单的罗列了一些配置的内容:
<bean id="examples.MyFactoryBean" factory-method="createInstance"/>
2 构造函数
<bean id="testBean" class="examples.ExampleBean">
<constructor-arg><ref bean="testArgs1"/></construtor-arg>
<constructor-arg><ref bean="testArgs2"/></construtor-arg>
</bean>
相当于
class testBean{
public testBean(testArgs1,testArgs2);
}
3 单例模式
<bean id="testBean" class="test.testBean" singleton="false"> 每次请求生成的都是同一个bean
4 <idef> 与 <ref>作用相同,但是idef会在xml加载时 检查 bean是否存在
destroy-method 销毁,通常都是配置数据源、JDBC、输入输入流时,需要在close时销毁对象
depends-on 先后顺序实例化
init-method 初始化调用方法
BeanNameAware 让类知道自己bean在xml中的id名字
BeanFactoryAware 获得beanFactory
InitializingBean接口执行初始化方法
Disposablebean 执行销毁方法
9 属性覆盖,这个通常是在配置了一些属性,但是有其他的一些文件修改了这个属性时,使用。
比如说,我们在项目中通过spring的配置文件配置了数据源的相关信息,但是额外有一个xxx.properties进行信息的重写。当有这个文件时,可以让客户自己修改其连接信息,而不用每次都去修改繁琐的spring配置文件。
org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
【Spring开发】—— Spring Core的更多相关文章
- 用 MyEclipse 开发 Spring 入门操作
何为Spring Spring框架是一个轻量级的控制反转(IOC)技术和面向切面编程(AOP)技术的容器框架,利用Spring框架可以实现对象的生命周期管理和分离应用系统中的业务逻辑组件和通用的技术服 ...
- 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)
背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...
- spring cloud+dotnet core搭建微服务架构:配置中心续(五)
前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这 ...
- 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建三:配置spring并测试
这一部分的主要目的是 配置spring-service.xml 也就是配置spring 并测试service层 是否配置成功 用IntelliJ IDEA 开发Spring+SpringMVC+M ...
- 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 构建目录环境和依赖)
引言:在用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建一 的基础上 继续进行项目搭建 该部分的主要目的是测通MyBatis 及Spring-dao ...
- spring cloud+.net core搭建微服务架构:服务注册(一)
背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...
- spring cloud+.net core搭建微服务架构:配置中心续(五)
前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这 ...
- 开发Spring Shell应用程序
2 开发Spring Shell应用程序 向shell提供命令非常简单,需要学习的注解很少.该命令的实现风格与使用依赖注入的应用程序的开发类相同,您可以利用Spring容器的所有特性来实现您的命令类. ...
- webservice-之使用axis+spring开发
一.环境配置 :在 eclipse 中配置引入相应的 spring框架( core/Remoting/Web ). axis 包. 二.代码开发 1. 在 MyEclipse 中建立一个新的 J ...
随机推荐
- 【转载】matlab中freqz函数的使用
freqz函数计算线性系统的频率响应,包括幅频响应和相频响应,基本输入为线性系统的AMMA模型系数向量,一个典型的AMMA模型为 % jw -j ...
- iTween基础之Fade(淡入淡出)
一.基础介绍:二.基础属性 原文地址: http://blog.csdn.net/dingkun520wy/article/details/50923665 一.基础介绍 FadeTo:从当前透明度变 ...
- UITableView设置cell为不可选?
本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术.本文将为读者讲解UITableView如何设置单 ...
- Linux下各硬件装置的文件名
Linux对计算机各组件/装置的分辨,是和Windows系统完全不一样的!因为各个组件/设备在Linux上都是一个文件!因此,我们在认识各项设备时一定要学习Linux的设备文件名. 众所周知,Linu ...
- 浅谈ERP系统实施后如何完善企业内部控制制度建设
ERP与企业内部控制制度,前者提升企业的管理水平,后者为企业发展保驾护航,两项工作都是企业各项工作的重中之重. ERP是企业资源规划Enterprise Resource Planning的缩写.企业 ...
- Android -- TouchEvent的分发和截获方式
Android系统中的每个ViewGroup的子类都具有下面三个和TouchEvent处理密切相关的方法: public boolean dispatchTouchEvent(MotionEvent ...
- windows和linux环境下制作U盘启动盘
新笔记本上,要装xp的系统,100%会破坏原有的Linux系统,因为安装xp的时候会自动覆盖硬盘的主引导扇区,这个扇区一旦被重写,那么原有的linux根本就启动不了. 要想玩linux和xp双系统,一 ...
- android开发 自定义图文混排控件
功能:图文混排,可自动缩放字体,如图: 单点触控使用的代码来自:http://blog.csdn.net/xiaanming/article/details/42833893 谢谢博主! 在该dem ...
- 关于VS2010中一打字,换行,拖控件便出现卡死的问题的解决方案
大家好,这是我第一篇博文. 最近一个月都是静静的观看,想发帖子很久了. 最近实习完刚换了份工作,入职之后啊先是装了一堆软件.然后,便出现问题,就是VS2010上码字和切换页面的时候会卡.开始的时候每次 ...
- C#格式化JSON字符串
很多时候我们需要将json字符串以 { "status": 1, "sum": 9 }这种方式显示,而从服务端取回来的时候往往是这样 {&quo ...