仿spring的ioc实现之注解注入的小例子
来源:互联网 发布:医院大数据风控 编辑:程序博客网 时间:2024/05/20 05:56
首先,我们先写出一个自定义的注解
<span style="font-size:14px;">package com.test.aonntion;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 Ioc {// obj传入的参数类型为object的子类的类型,默认参数为Object.classpublic Class<? extends Object> obj() default Object.class;}</span>
然后我们声明三个类 用来测试
先声明一个抽象的父类
<span style="font-size:14px;">package com.test.aonntion;public abstract class Parent {// 抽象方法public abstract void say();}</span>
在声明两个子类,继承自我们的父类
SON子类
<span style="font-size:14px;">package com.test.aonntion;public class Son extends Parent{@Overridepublic void say() {// 儿子打酱油去System.out.println("i'm my Parent's Son");}}</span><span style="font-weight: bold;"></span>
<span style="font-size:14px;">package com.test.aonntion;public class Daughter extends Parent {@Overridepublic void say() {// 闺女打酱油去System.out.println("i'm my Parent's Daughter");}}</span>
接下来要完成我们的功能类的编写了
<span style="font-size:14px;">package com.test.aonntion;import java.lang.reflect.Field;public class IocTest {public static void startIoc(String objName) throws Exception{// 获取该类Class<?> clazz = Class.forName(objName);// 实例化该类的对象Object testIoc = clazz.newInstance();// 获得类下面的所有属性Field[] fields = clazz.getDeclaredFields();// 判断该类中的是否有属性if(fields != null && fields.length > 0 ){// 遍历所有的属性for(int i =0;i < fields.length; i++){// 获得当前属性的ioc注解Ioc ioc = fields[i].getAnnotation(Ioc.class);// 如果当前属性的ioc注解不为空并且obj的值不为空if( ioc != null && ioc.obj() != null ) {// 获得我们注入obj的类,并且实例化该类,得到该实例ojbObject ojb = ioc.obj().newInstance();// 让属性支持强制注入,既-当属性为私有变量并且没有set方法时// 强制调用set("属性名",要注入的属性);fields[i].setAccessible(true);// 将我们实例化的对象注入进属性内fields[i].set(testIoc, ojb);}}}}// 这是我派去打酱油的是我儿子@Ioc(obj=Son.class)// 声明一个父类对象1private static Parent parent;// 这是我派去打酱油的是我闺女@Ioc(obj=Daughter.class)// 声明一个父类对象2private static Parent parent1;/** * @param args */public static void main(String[] args) {try {// 启动注解startIoc("com.test.aonntion.IocTest");} catch (Exception e) {e.printStackTrace();}// 父亲A派出打酱油的人说parent.say();// 父亲B派出打酱油的人说parent1.say();}}</span>
测试结果
1 0
- 仿spring的ioc实现之注解注入的小例子
- SSM搭建-Spring之IOC的注解注入(6)
- Java反射、泛型和注解实战之Spring核心注入IOC的实现
- Spring--IoC--域属性的注入-使用spring注解
- Spring IoC依赖注入的实现
- Spring学习3—控制反转(IOC)基于Annotation(注解)的依赖注入实现
- Spring 使用注解的方式实现IOC和DI(控制反转和依赖注入)
- Spring之IOC的注入方式总结
- Spring之IOC的注入方式总结
- Spring之IOC的注入方式总结
- 7、SSM框架-Spring之IOC的注解注入(7)
- Spring--IoC--域属性的注入-使用@Resource注解(JSR)
- Spring xml注入与注解小例子
- spring 框架中的依赖注入(IOC--设值注入)--使用注解--的具体实例的简单实现
- [Spring]IoC容器之进击的注解
- 基于注解的spring aop小例子
- Spring之IOC的实现
- 依赖注入(DI)和控制反转(IOC)的详细讲解 spring容器(spring注解实现,而不是xml配置文件)
- 自定义控件实现控件间距
- 【BZOJ1011】【HNOI2008】遥远的行星 根据所允许的误差进行模糊DP
- 使用ngrok快速地将本地Web服务映射到外网
- android web页面点击事件跳转至APP
- 用httpclient遇到403错误
- 仿spring的ioc实现之注解注入的小例子
- Android如何用命令行进行打包
- tomcat 多个虚拟主机的配置
- 树状数组求区间和的一些常见模型
- ios8 UIView API使用说明
- 序列化的作用
- C++内存管理——指针&&数组
- freeswitch centos 安装
- Java开源工具使用介绍-----Apache Commons Lang