Spring原理之AOP与IOC解析

说到Spring,最基础的原理便是aop与ioc了。

然而在实际中我们经常用到,面试问到,说起来又戛然而止,不知道从何说起。

一向重武轻文的我,只能说书到用时方恨少。虽说实践才是检验真理的唯一标准,但是真理还是得人人都耳瞩目然才行。

1.AOP 面向切面编程

1)简单介绍,项目中那些地方用到

        我是这样理解的,简而言之,就是把公共的部分抽象出来,就是说我们在创建表的时候往往加上备注,时间戳,创建时间,更新时间等,可以把他们抽取出来,在比如,学生和老师,都有公共的地方,性别(男女),生日,姓名,等等都可以抽取,再比如,我们做一些操作的时候,系统会记录我们的操作信息,以及系统与系统之间的交互,这个大概就是我们所说的日志,再比如,就拿简单的操作数据库增删改查来说,分为以下几个步骤:

1:.获取连接对象

2.执行SQL(核心业务代码)

3.如果有异常,回滚事务;没有异常,提交事务

4.关闭连接

执行 SQL使我们的核心业务代码,而获取连接对象,提交回滚事务,关闭连接这些操作可以抽取出来,这样我们只需要关注执行SQL(核心业务代码),节省了开发效率。

这些行为操作的抽取也可以说是aop的实践思路。

2)实现原理:代理思想

(1)静态代理

        针对每个具体的类分别编写代理类;

        针对一个接口编写一个代理类。

        我理解为继承一个类,实现一个接口,对类,接口行为的操作抽取出来并进行扩充,比如实现接口记录日志,不改动原有逻辑记录日志。

        即对象是老师,可以教课,亦可以上自习。持有对象一样,做不同的行为操作。

(2)动态代理

        针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类。

        最常用的便是get、set、构造器constructor。

        

2.IOC 控制反转

1)简单介绍

        简单来说就是控制权由对象转为容器,容器根据配置文件去创建实例并创建各个实例之间的依赖关系。

2)实现原理:反射

什么是反射?

         通过类说明可以得到类的父类、实现的接口、内部类、构造函数、方法、属性并可以根据构造器实例化一个对象,唤起一个方法,取属性值,改属性值。

        如何得到一个类说明?

        Class cls=类.class;

        Class cls=对象.getClass();

        Class.forName("类路径");

        如何得到一个方法并唤起它?

                        Class cls=类.class;

                        Constructor cons=cls.getConstructor(new Class[]{String.class});

                        Object obj=cons.newInstance(new Object[]{"aaa"});

                        Method method=cls.getMethod("方法名",new Class[]{String.class,Integer.class});

                        method.invoke(obj,new Object[]{"aa",new Integer(1)}); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值