Spring简介

Spring的官方网站:http://www.springsource.org/

 

Spring的核心功能是IoC和AOP。IoC更为核心。

 

IoC:Inversion of Control (控制反转)

AOP:Aspect Oriented Programming (面向方面编程)

 

IoC又称DI(Dependency Injection):依赖注入

 

Spring的IoC完成的功能:

配置文件中bean的初始化,这样就不需要我们手动的书写单粒模式、工厂模式等等。只需要根据我们的需要把一个类配置成单粒的还是多粒的。

可以把IoC看成是一个抽象工厂,可以创建出许多对象。不需要我们自己编写Singleton、Factory,都由IoC容器来创建对象、管理对象。

 

IoC其实很简单
以前我们写程序时,如果A类里需要调用B类方法——那A类就自己new一个B类的实例,然后再调用B类的方法。
这样做的不好就体现在:A类的代码和B类的代码以“硬编码“方式耦合了。

 

实现方式:

通常是采用XML配置文件、或Annotation注释管理的方式配置A和B之间的依赖关系——IoC容器就会根据配置管理,运用反射创建B类的实例,把B实例注入给A。这样A类就和B类的耦合分离开了。

 

Ioc是一种思想,具体的实现包括两种:依赖查找、依赖注入
依赖查找:需要调用相应的API,这样就会有依赖性,所以很少用。
IoC采用DI(Dependency Injection)技术:依赖注入
通过set()、get()、构造方法,对象new好之后,容器帮助把对象注入进来。

 

--------------------------------------------------------------------------------------------
AOP的全称是Aspect Oriented Programming,中文翻译成面向方面编程、面向切面编程。

 

AOP的缺省实现:jdk的动态代理机制。

 

JDK的动态代理机制。
静态代理:确实存在的。
动态代理:在运行期生成的。

 

JDK的动态代理机制术语:
目标对象(targetObjet):应用的业务逻辑处理对象。就是真实的实现类。
代理对象(Proxy Object):根据代理机制生成的对象,代理对象要以目标对象为基础。

 

横切性关注点(advice):
有一些方法,它可以独立出来。但是我们的业务逻辑执行的时候要执行这些额外的方法。
我们把这些独立出来的方法叫做横切性关注点。
这些横切性关注点可能散列在程序里,我们把它拿出来并且模块化。以后我们单独修改这些模块就可以了。
可见AOP就是面向对象的一个补充。模块化的这个类就叫切面类(Aspect)。

 

AOP管理的就是横切性关注点。

 

JDK的动态代理:
运行期生成
动态代理首先要实现一个接口:java.lang.reflect.InvocationHandler
代理对象和目标对象的接口是一致的。

 

切面类(Aspect)里包括:
横切性关注点(advice)的所有实现。
对横切性关注点模块化的这个类就叫做切面类。

 

advice分类:
before advice:加到方法之前
after advice:加到方法之后

 

切入点(pointcard)
有一些表达式,表示要把advice加入到目标对象的哪些方法里。

 

把切面应用到目标对象的方法上这个过程叫做支入(Weave)。

 

连接点(Joinpoint)
把切面应用到目标对象的方法上,这个方法叫做连接点。目前spring连接点只支持基于方法。

 

AOP的关键是发现横切性关注点,最后把这些关注点模块化成切面类。

 

实现AOP有多种方法:
1、采用jdk动态代理
2、使用CGLIB(字节码生成)
如果目标对象实现了接口,spring默认情况下会采用jdk的动态代理来实现AOP。
如果目标对象实现了接口,spring也可以强制使用CGLIB来实现AOP。(需要CGLIB库)
如果目标对象没有实现接口,必须使用CGLIB来实现AOP。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值