手写spring
http://blog.csdn.net/u010837612/article/details/50686573
只需要导入dom4j.jar 和jaxen-1.1.1.jar就行了
步骤1 根据xml路径解析xml生成对应的 一个map
configMap.put(id, bean);
<bean id="address" class="spring_shouxie.Address">
这个id和xml中的id一致
最后生成的map可以根据id找到他的所有属性
步骤2 根据map中的id和bean 生成对象 利用反射生成对象并且属性注入 ioc = new HashMap<beanName, 对象>();
//根据bean的calss属性生成对象
c = Class.forName(className);
//该方法调用的是类的无参构造方法
object = c.newInstance();
//获取属性对应的setter方法
Method getMethod = BeanUtil.getSetterMethod(object,p.getName());
try {
//调用set方法注入
getMethod.invoke(object, p.getValue());
最后生成ioc容器 存放beanName和 生成对象的 关系
ioc = new HashMap<beanName, 对象>();
步骤3 根据这个容易获取生成的对象
User user = (User) bf.getBean("user");
public Object getBean(String beanName) {
return ioc.get(beanName);
}
步骤1和2 都是加载xml时候完成的 BeanFactory bf = new ClassPathXmlApplicationContext("/ApplicationContext.xml");
总结:原先代码依赖是通过引入依赖类 现在依赖是通过java反射根据xml 可以随意修改 删除 这个列子是通过set方法注入的
通过注解注入也是类似的 就是减少了set方法 通过注解首先要扫包 根据包解析到 对应的.class文件 根据class文件生成对对象 再把对象通过反射注入到引用的地方的 没有用set或者构造函数 进行注入。
比如
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public void save(){
userRepository.save();
}
}
浙公网安备 33010602011771号