当前位置: 首页 > news >正文

不能访问子目录的网站做问卷赚钱的网站

不能访问子目录的网站,做问卷赚钱的网站,在centos上搭建wordpress,成都免费建网站Android 实现一个依赖注入的注解 🎯 目标功能 自定义注解 Inject创建一个 Injector 类,用来扫描并注入对象支持 Activity 或其他类中的字段注入 🧩 步骤一:定义注解 import java.lang.annotation.ElementType; import java.lan…

Android 实现一个依赖注入的注解

🎯 目标功能

  • 自定义注解 @Inject
  • 创建一个 Injector 类,用来扫描并注入对象
  • 支持 Activity 或其他类中的字段注入

🧩 步骤一:定义注解

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Inject {
}

🧩 步骤二:实现注入逻辑

import java.lang.reflect.Field;public class Injector {public static void inject(Object target) {Class<?> clazz = target.getClass();Field[] fields = clazz.getDeclaredFields();for (Field field : fields) {if (field.isAnnotationPresent(Inject.class)) {try {Class<?> type = field.getType();Object instance = type.newInstance(); // 也可以用构造器缓存池优化field.setAccessible(true);field.set(target, instance);} catch (Exception e) {e.printStackTrace();throw new RuntimeException("Failed to inject " + field.getName());}}}}
}

🧩 步骤三:使用示例

要实例化的对象类

import android.util.Log;public class Service {public void doSomething() {System.out.println("Service is working");Log.i("ServiceTAG", "Service is doSomething");}
}

在MainActivity注入

public class MainActivity extends AppCompatActivity {@InjectService service;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 注入逻辑Injector.inject(this); // 使用注入的对象service.doSomething(); }
}

✅ 补充建议

  • 为了更灵活,你可以改用 构造器注入单例管理
  • 如果要支持参数构造函数、依赖图、作用域管理,可以逐步扩展。
  • 如果你对性能敏感,可以考虑使用 APT(注解处理器) 生成代码。

逐段解释一下上述代码:

🔧 一、自定义注解 @Inject

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Inject {
}
✅ 解读:
  • @Target(ElementType.FIELD)
    表示这个注解只能用于 字段上,不能用于类、方法等。
  • @Retention(RetentionPolicy.RUNTIME)
    表示这个注解在 运行时依然存在,这样我们就可以通过反射获取它。
  • public @interface Inject {}
    这是定义了一个名为 Inject 的注解,它 不包含任何参数,只作为标记使用。

🧠 二、注入器类 Injector

public class Injector {public static void inject(Object target) {Class<?> clazz = target.getClass();Field[] fields = clazz.getDeclaredFields();
✅ 解读:
  • inject(Object target):这是一个静态方法,接收需要注入依赖的对象,比如 Activity
  • target.getClass():获取目标类的 Class 对象。
  • clazz.getDeclaredFields():获取这个类里 声明的所有字段(不管是私有还是公有)。
        for (Field field : fields) {if (field.isAnnotationPresent(Inject.class)) {
✅ 解读:
  • 遍历所有字段,检查有没有使用我们自定义的 @Inject 注解。

              try {Class<?> type = field.getType();Object instance = type.newInstance(); // 创建实例
    
✅ 解读:
  • field.getType():获取字段的类型,比如是 Service.class
  • type.newInstance():用 默认无参构造函数 实例化对象。

⚠️ 这里假设被注入的类必须有一个无参构造函数。

                    field.setAccessible(true);field.set(target, instance);
✅ 解读:
  • setAccessible(true):允许访问私有字段。
  • field.set(target, instance):将我们创建好的实例注入到目标对象的字段中。

                } catch (Exception e) {e.printStackTrace();throw new RuntimeException("Failed to inject " + field.getName());}}}}
}
✅ 解读:
  • 如果注入失败就打印异常并抛出运行时异常,方便调试。

💡 三、使用方式解析

public class MainActivity extends AppCompatActivity {@InjectService service;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Injector.inject(this); // 调用注入器注入service.doSomething(); // 使用注入后的 service}
}
✅ 解读:
  • 使用了 @Inject 标记字段,告诉注入器需要注入这个字段。
  • Injector.inject(this):告诉系统对这个对象(MainActivity)做依赖注入。
  • service.doSomething():使用注入后的对象方法。

📌 总结核心原理

步骤描述
1定义注解,告诉系统哪些字段要注入
2通过反射找出所有有注解的字段
3为这些字段创建对应实例
4把实例赋值给这些字段
http://www.dtcms.com/a/421701.html

相关文章:

  • 天津网站推广公司哪家好网页广告
  • 微信分销网站开发淘宝美工做兼职的网站
  • 企业做淘宝网站需要多少钱在哪建网站
  • 做素材网站存储昆山网站建设义搏
  • 郑州网站制作工作室有域名建网站
  • 佛山顺德网站建设公司哪家好二级网站怎么建设
  • 大城 网站常见的网站推广方式
  • vs2019可以做网站吗关键词优化需要从哪些方面开展?
  • 美发网站源码徐州网站开发多少钱
  • 网红网站建设官网app开发公司有哪些
  • 电子商务网站建设服务模式论文wordpress 用的什么框架
  • 响应式网站 appwordpress改登录路径
  • 用python做网站我那些wordpress标签描述代码
  • 江西临川建设集团有限公司网站少儿编程平台
  • 信息发布网站建设2023年央选职位表
  • 广州网站建设企业武义公司网站建设
  • 网站制作计划书网址域名ip查询子域名解析
  • 某网站seo诊断分析上海缔客网站建设公司
  • 陕西省建设厅申报网站wordpress建站dedecms
  • 北京 外贸型网站建设抖音代运营朋友圈文案
  • 建设银行申请信用卡网站腐女做喜欢的网站
  • 编写网站策划方案公众号怎么开通收费功能
  • 有没有什么做h5的网站最好的网站统计
  • 网站开发的三个流程网站建设推广优化招聘模板
  • mvc网站开发 案例视频呼市賽罕区信息网站做一顿饭工作
  • 食品营销网站建设调查问卷做公众号主页面的有哪些网站
  • 网站升级维护中 模板扬中网站建设怎么样
  • 哪个学校有网站建设培训机构好还是学校好
  • 中国最大网站建设商推荐知乎wordpress 行间距
  • 谁有手机网站发几个吧天娇易业网站建设公司