注解和依赖注入框架
在开始之前,问自己几个问题。
什么是注解?注解有什么作用?注解的应用场景有哪些?
注释.png
一、注解及其作用
注解是在JDK 1.5 及更高版本中引入的。这些是代码中的特殊标记(带有“@annotation name”),可以在编译、类加载和运行时读取并执行操作。我引用《Java编程思想》中的解释。 注释提供了一种向代码添加信息的正式方法,使这些数据在以后非常有用。
二、注解的分类
请参阅上面的地图。这里我们简单解释一下一些元注释。
@Targe:注解修改的对象范围。该值是ElementType 类型的数组。 可能的值包括FILED METHOD。 @Retention:用于声明注解的保留策略。 可能的值是RetentionPolicy.SOURCE CLASS和代表源代码级别的RUNTIME。编译时注解和运行时注解都可以通过反射获取注解信息。
三、使用
3.1 注解定义
这是自定义注释的示例
//表示该注解是运行时注解,如果需要可以设置为其他两种类型。
@Retention(RetentionPolicy.RUNTIME)
//使用@interface关键字定义一个新的注释
public @interface Student { //该注解只有成员变量,没有方法//以如下无参方法的形式定义成员变量//可以使用默认关键字字符串name()default \’Joey\’ 指定默认值; int age()default 20 } //如果定义了成员变量,则使用该注解时必须指定其值//(定义了默认值@Student(name)=\’K\’,age=\’21\’) public无效测试(){}
关于选择@Retention 值:
如果您只想执行一些检查操作,请使用SOURCE。
选择CLASS可以在编译时进行预处理,例如生成辅助代码。
如果在运行时动态检索注释信息,请选择“运行时”。
3.2 注释处理器
要启用注释,您需要使用注释处理器。实现注释处理器的常见方法是:
对于运行时注解,编译时注解使用反射机制和AbstractProcessor进行处理。
让我们分别看一下。
运行时注释
继续上面的例子,
@Retention(RetentionPolicy.RUNTIME)
公共@interface学生{
String name()default int age()default 20; } public class AnnotationTest { @Student(name=\’K\’,age=\’21\’) public void test() { } } //下面是一个简单的注释处理器public 类AnnotationProcessor { public static void main(String[] args) { Method[]messages=AnnotationTest.class.getDeclaredMethods(); for (Method m:messages) { Student Student=m.getAnnotation(Student.class);学生.姓名() + \’ \’ + 学生.年龄());
getDeclaredMethods 和getAnnotation 方法都属于AnnotatedElement 接口,Class、Method 和Filed 类都实现该接口。
编译时注释处理器
四、依赖注入
控制反转(IOC):用于实现对象之间的隔离,控制反转是指利用第三方来实现依赖对象之间的隔离。
例如,假设对象A和B是相互依赖的,一旦A执行到某个点,A可能会主动创建或者使用对象B为B创建对象。此时,主动权就在。 A的手;当IOC创建对象后,A和B之间的直接连接就丢失了。当A需要B时,IOC容器主动创建B对象,并将其插入到A需要的地方。我们可以看到,A创造B的过程从主动变成了被动。这代表着控制权的逆转。
依赖注入(DI):依赖注入。在IoC 容器运行时动态地将特定依赖项注入到对象中。
如何实现依赖注入:
一个例子如下所示。
如果你的代码需要依赖其他类,可以这样写:
公共汽车{
私有引擎Engine; public Car() { Engine=new ConcreteEngine() } }
这种方法的问题是耦合度太高。当发动机类型发生变化时,汽车需要识别一个具体的发动机实现类,即ConcreteEngine类。
将上面的代码改为依赖注入的方式。
公共汽车{
私家车引擎; 公共汽车(引擎引擎) { this.engine=引擎} }
这样,即使后面的类型发生变化,Car也不需要知道Engine的实现。
一些简单的依赖注入方法是:
构造函数注入
setter 方法的注入
接口注入
以上关于#annotations和依赖注入框架的相关内容来源仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92615.html