注解和依赖注入框架(依赖注入定义)

注解和依赖注入框架注解和依赖注入框架 在开始之前,带着几个问题去看: 什么是注解?注解有什么作用?如何使用注解?注解的应用场景? 注解.png 一、注解及其

注解和依赖注入框架

在开始之前,问自己几个问题。

什么是注解?注解有什么作用?注解的应用场景有哪些?

注释.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

(0)
CSDN's avatarCSDN
上一篇 2024年6月27日 下午7:41
下一篇 2024年6月27日 下午7:41

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注