spring IoC和AOP的原理

下面为spring的主要原理:
IoC(Inversion of Control):IoC就是应用本身不依赖对象的创建和维护而是交给外部容器(这里为spring),这要就把应用和对象之间解耦,控制权交给了外部容器。即Don't call me ,I'll call you!所以IoC也称DI(依赖注入)对象的创建和维护依赖于外部容器.
class UserService{
private UserDao userDao = new UserDaoImpl(); <wbr>//让业务层与数据访问层耦合在一起,不利用以后模块的替换.</wbr>
private UserDao userDao_IoC = null;
public void SetUserDao(UserDao userDao){
this.userDao_IoC = userDao
}

public void save(User user){
userDao.save(user);
}
}

AOP(A spect Oriented Programming):面向切面编程。就是把一些贯穿在各个模块之间相同的功能抽象出来,然后封装成一个面。
AOP一般都是通过代理来实现,利用代理就有目标对象是什么,拦截哪些点(方法),拦截后要做什么。
JoinPoint(连接点):被拦截到的点. Advice(通知):拦截JoinPoint之前与之后要做的事。
PointCut(切入点):对joinPoint进行拦截的定义。Target(目标对象):代理的目标对象。
对于异常处理,日志功能,权限的检查,事务等都是贯穿到各个模块之中,因此进行AOP.
代理技术有面向接口和生成子类.
public Object getProxy(final Object targetObj) {<wbr></wbr>
Obejct obj =<wbr>Proxy.newProxyInstance(<wbr></wbr></wbr>
<wbr><wbr><wbr><span style="line-height:21px">targetObj</span>.getClass().getClassLoader(), <wbr><wbr><wbr> //被代理类的类加载器</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><span style="line-height:21px">targetObj</span>.getClass().getInterfaces(),<wbr><wbr>//被代理类接口的字节码</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr>new InvocationHandler() {<wbr><wbr>//类似于一个回调函数 代理功能就在里面实现</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>@Override<wbr></wbr></wbr></wbr></wbr></wbr></wbr>
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{
<wbr><wbr> try{<wbr></wbr></wbr></wbr>
beforeAdvice();<wbr><wbr>//前置通知</wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>method.invoke(targetObj, args); <wbr>//拦截的点</wbr></wbr></wbr></wbr></wbr></wbr>
afterAdvice(); <wbr><wbr>//后置通知</wbr></wbr>
<wbr><wbr><wbr>}catch (Exception e) {<wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>exceptionAdvice();<wbr><wbr>//异常通知</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr>}finally{<wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> finalAdvice();<wbr><wbr>//必须执行通知</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> }<wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>return obj;<wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr>}<wbr></wbr></wbr>
<wbr>});<wbr></wbr></wbr>
<wbr>}</wbr>
还一个用子类实现的同理 要采用CGlib库来实现 JDK6之前未提供,估计JDK以后会提供。

这就是spring的2大原理,自如怎么配置,那就要花点时间去学,原理思想掌握了哪些配置方法随便学下就明白了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值