IOC是什么?
是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度,其中最常见的便是依赖注入。简单点说就是如果你在一个类A中实例化一个对象B,那么久需要在A类中使用new来进行实例化对象B,这样A和B的耦合度就很高,而IOC是通过注解让其进行动态生成,而不需要自己去实例化,以此来降低耦合度。(依赖注入核心)
需要用到的知识:
反射
注解
如果不熟悉上面两个知识,可百度找一篇如果操作即可。
实现的最终结果:
注入布局:即让我们在代码中不需要写setContentView()方法,而是通过在类之上添加注解(MContentView)来动态生成:
注入控件:即在代码中不需要写findViewById方法,而是通过在属性之上添加注解(MBIndView)来动态生成:
实现过程:
实现注入布局过程:
思考1:要想实现在类上的注解,首先我们需要创建一个注解MContentView,而这个注解是作用在类之上,所以其作用域是类之上(ElementType.TYPE)并且我们的注解是在运行时使用的,所以声明其是运行时使用(RetentionPolicy.RUNTIME)。因此创建一个注解如下:
@Target(ElementType.TYPE)//作用在类上
@Retention(RetentionPolicy.RUNTIME)//运行时
public @interface MContentView {
}
思考2:由最终效果可知,因为我们需要代替setContentView(),而这个方法需要传入layoutId(R.layout.activity_main),所以注解中还要添加一个int类型的方法,如下:
@Target(ElementType.TYPE)//作用在类上
@Retention(RetentionPolicy.RUNTIME)//运行时
public @interface MContentView {
int value() ;
}
至此注解MContentView已完成,在MainActivity中即可引用该注解并附上layoutId,如下图: