关于反射、注解、依赖注入、控制反转的一些总结。

2018-07-18  本文已影响0人  阿星_

1 无论是android的Butterknife、retrofit还是javaweb的spring框架,AOP(面向切面编程)。

这些优秀的框架,大多是用了注解、动态代理来实现。(ButterKnife没有用到反射。)

那么先说注解,说到注解要先说反射。

反射的原理如图

反射也就是通过Class.fromName(类全名)拿到类的class对象,有了这个对象就可以拿到类的所有信息了。

比如成员,构造方法,方法。。这些。

那么注解呢。

注解可以理解为标签,它和class以及interface一样,属于一种类型。

是java1.5后引入的。

而注解需要正常工作,则需要引入元注解。

元注解可以理解为注解到注解上的注解。或是一种特殊的标签。

常用的有retention和target

注解是只有属性,没有方法的。

而属性的表达方式又是无参数的方法。

有属性,就一定要给他赋值,有默认值就不用赋。

也可以用value=xx的方法来赋值。

如果没有属性,那么注解的括号要去掉。

其实java本身提供了几个现成的注解。

那么它的保留期应该是RetenPolicy.Class保留到编译进行时。

那么注解的使用,比如Butterknife。

就是把这个标签贴到类的成员view上面,然后写上注解的值是view的id。

那么怎么把这个id拿出来呢。

靠的就是反射了。

那么控制反转和依赖注入的关系是什么呢。

我的理解是依赖注入就是对象自动生成bean,不用自己new了。

而控制反转就是把自己new对象的方式交给第三方,比如spring容器。

那么控制就反转了。

那么控制反转的好处是什么呢。

对spring来说。

如果不用控制反转,那么所有的类相互依赖使用,是耦合在一起的。

类的创建和销毁,又是非常消耗资源的。

那么如果把所有要创建对象的类在spring中登记。

由spring来统一管理,控制对象的生命周期。这样耦合性就非常低并且便于管理了。

比如spring默认的注入方式是单例的。

这样类的相互使用,就不用多次创建对象消耗对象,或者每个类都写个单例麻烦。

根本目的是解耦,提高项目的可维护性。

以上。

上一篇 下一篇

猜你喜欢

热点阅读