什么是Spring

Spring是一个容器

Spring是一个开源的IOC和AOP框架,能够简化JavaEE开发。
Spring的核心是IOC(控制反转/依赖注入)实现松耦合,IOC的核心是容器,容器的核心是Java反射机制。
Spring的AOP技术是把核心代码和辅助性代码分开--面向切面编程,使开发者更关注于业务逻辑的开发。

一般主要是用来起IOC和AOP的功能,IOC(控制反转,只需写配置文件自动把类注入,不需要你写new了,使系统耦合度降低。AOP(面向切面编程,就是到了一个面上统一加上一些东西,功能一般用来配置事务的管理,这样你就不必每次用完PrepareStatement和ResultSet及Connection都要关闭,遇到异常都要回滚,配置即可,自动在你配置的要求执行的地方执行。

依赖注入:以前的web开发都是 web服务器给我什么我才能用什么 现在 我们可以通过依赖注入去主动的向web服务器去请求了 。

面向切面:就可以比喻成 现在我们在网游 我在游戏中的这个人物是不具备加血这个功能的 而游戏中现在提供了一个功能 就是通过一个门 你就会加血300 这个门就是一个切面 你可以想想一下 继承那快的东西 还有组合。

=====IoC,控制反转=====

容器的概念:容器是用来装其它对象的对象,除了装其它的对象,还要维护其它对象的关系。

代码片段1:

public class Container
{
	public void init()
	{
		Speaker s = new Speaker();
		Greeting g = new Greeting(s);
	}
}

可以看到这里的Container类(容器)在初始化的时候会生成一个Speaker对象和一个Greeting对象,并且维持了它们的关系,当系统要用这些对象的时候,直接问容器要就可以了。这就是容器最基本的功能,维护系统中的实例(对象)。

代码片段2:

public void greet() 
{   
	Speaker s = new Speaker(); 
	s.sayHello();  
}

代码片段3:

public void greet()
{
	Spraker s = (Spraker)context.lookup("ejb/Spraker");
	s.SayHello();
}

代码片段4:

public class Greeting()
{
	public	Spraker s;
	public  Greeting(Spraker s)
	{
		this.s = s;
	}
	public greet()
	{
		s.SayHello();
	}

}

我们可以对比一下这三段代码。其中片段2是不用容器的编码,片段3是EJB编码,片段4是Spring编码。结合代码片段1,你能看出来Spring编码的优越之处吗?也许你会觉得Spring的编码是最复杂的。不过没关系,我在后面会解释Spring编码的好处。 这里我想先解释一下“依赖注入”。根据我给的例子可以看出,Greeting类依赖Speaker类。片段2和片段3都是主动的去获取Speaker,虽然获取的方式不同。但是片段4并没有去获取或者实例化Speaker类,而是在greeting函数中直接使用了s。你也许很容易就发现了,在构造函数中有一个s被注入(可能你平时用的是,传入)。在哪里注入的呢?请回头看一下代码片段1,这就是使用容器的好处,由容器来维护各个类之间的依赖关系(一般通过Setter来注入依赖,而不是构造函数,我这里是为了简化示例代码)。Greeting并不需要关心Speaker是哪里来的或是从哪里获得Speaker,只需要关注自己分内的事情,也就是让Speaker说一句问候的话。

=====AOP,面向切面编程=====

AOP的作用是解耦和,现在的系统往往强调减小模块之间的耦合度,AOP技术就是用来帮助实现这一目标的。举例来说,假如上文的Greeting系统含有日志模块,安全模块,事务管理模块,那么每一次greet的时候,都会有这三个模块参与,以日志模块为例,每次greet之后,都要记录下greet的内容。而对于Speaker或者Greeting对象来说,它们并不知道自己的行为被记录下来了,它们还是像以前一样的工作,并没有任何区别。只是容器控制了日志行为。这些模块是贯穿在整个系统中的,为系统的不同的功能提供服务,可以称每个模块是一个“切面”。其实“切面”是一种抽象,把系统不同部分的公共行为抽取出来形成一个独立的模块,并且在适当的地方(也就是切入点,后文会解释)把这些被抽取出来的功能再插入系统的不同部分。 
从某种角度上来讲“切面”是一个非常形象的描述,它好像在系统的功能之上横切一刀,要想让系统的功能继续,就必须先过了这个切面。这些切面监视并拦截系统的行为,在某些(被指定的)行为执行之前或之后执行一些附加的任务(比如记录日志)。而系统的功能流程(比如Greeting)并不知道这些切面的存在,更不依赖于这些切面,这样就降低了系统模块之间的耦合度。


http://wenku.baidu.com/link?url=gw-rWVS9gNLyYWSP6Szw2tSg9qSYpfvu-4iaC4kgrC0aZKRrHQ1gzZaFxt0OdTrJQiNhkGb3Gf19UHQPrtlv6YK7JV5cw6HojkW9PcrLOgy

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值