java 反射 模拟spring自动注入
来源:互联网 发布:多张表格数据汇总透视 编辑:程序博客网 时间:2024/04/30 17:14
基于反射和注解机制,简单模拟Spring解析Autowired注解的过程。
1、自定义Autowired注解,代码如下
package com.basic.reflect;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME)@Target({ ElementType.FIELD, ElementType.METHOD })public @interface Autowired { //注解的name属性 public String name() default ""; }
2、定义相关的业务和Dao类,以及获取Bean的容器(在容器中基于反射实现自动注入)
public class PersonDao {public int add(Object o) {System.out.println("dao autowird ok ");return 0;}}public class ServiceImpl { @Autowired private PersonDao personDao; public int addPerson(Object obj) { return personDao.add(obj); }}public class BeanContainer { public static Object getBean(String name) { try { Class<?> clazz = Class.forName("com.basic.reflect.ServiceImpl"); Object bean = clazz.newInstance(); Field[] fileds = clazz.getDeclaredFields(); for (Field f : fileds) { if (f.isAnnotationPresent(Autowired.class)) { // 基于类型注入 Class<?> c = f.getType(); Object value = c.newInstance(); //允许访问private字段 f.setAccessible(true); //把引用对象注入属性 f.set(bean, value); } } return bean; } catch (Exception e) { e.printStackTrace(); } return null; }}
3、测试类
public class Test {public static void main(String[] args) {ServiceImpl impl = (ServiceImpl) BeanContainer.getBean("service");String name = "test";impl.addPerson(name);}}
总结,上面的代码简单模拟了Spring解析Autowired的过程,写的比较简单,但是精髓已经写到了,主要就是利用反射机制生成实例并且解析注解对其属性进行赋值。其实Spring框架的核心Ioc和Aop的实现,还是利用了java最基本的东西,比如Aop就是利用了动态代理,Ioc就是利用了反射机制
1 0
- java 反射 模拟spring自动注入
- java 反射 模拟spring自动注入
- java反射模拟spring依赖注入
- java 反射,spring 自动注入原理
- Java反射机制的应用-模拟Spring的依赖注入
- java的反射原理与Spring的自动注入(转载)
- java简单模拟Spring的依赖注入
- java模拟spring实现依赖注入
- 重回Java开发-利用反射模拟Spring
- Java反射—模拟Spring的Aop
- Java反射机制模拟Spring IOC容器
- java反射机制模拟Spring Ioc实现
- 【JAVA】Spring 自动注入类注释详解
- 模拟spring的注入
- 模拟spring注入
- spring 注入简单模拟
- java 反射调用Service导致Spring注入Dao失效
- Java反射生成对象注入spring(结合工厂模式)
- Stanford公开课机器学习---week1-1.Intrduction 机器学习介绍
- 【坑坑坑坑坑】strncpy是个坑
- 第三章,课外作业(C++,数字高精度之加法)
- SGU109 Magic of David Copperfield II
- JavaScript建立HTML
- java 反射 模拟spring自动注入
- 指定的网络名不再可用
- OC 数组排序方法论
- JAVA设计模式:观察者模式
- Java Servlet PDF文件生成
- [C/C++]_[初级]_[标准字符串std::string 所有函数的用法总结]
- 【原创】ppp拨号上网总结
- Qt4.8.5 配置mysql驱动
- 重载流插入运算符和流提取运算符