Spring的实现原理剖析(自己总结版,大家来补充)
来源:互联网 发布:阿里云东京节点 编辑:程序博客网 时间:2024/06/05 11:09
1. Spring包含IOC(控制反转)和AOP(面向切面编程)
IOC指的是应用本身不负责依赖对象的创建和维护,依赖对象的创建和维护由外部容器负责。
2. 那么Spring是怎样进行创建bean、管理bean和进行依赖注入的呢?
首先分析通过xml配置的方式:
首先容器使用dom4j读取beans..xml文件,把id和className保存到对象中,使用类名通过反射创建class的实例。并且把id和类的实例放到map中方便存取,这样就实现创建和管理bean了。接下类就是依赖注入通过dom4j把property属性的name和ref放到另一个对象中,通过遍历类实例的属性描述符和xml属性的配置信息,判断xml中有相关的配置,就通过反射调用属性的set方法,来为其赋值。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="personDao" class="cn.itcast.dao.impl.PersonDaoBean"></bean>
<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean">
<property name="personDao" ref="personDao"></property>
</bean>
</beans>
其次是通过注解的方式:
首先要开发一个注解
@Retention(RetentionPolicy.RUNTIME)//注解的作用范围是在运行过程中
@Target({ElementType.FIELD,ElementType.METHOD})//作用目标是字段和方法
public @interface MyResource{
public String name(){} default " ";
}
然后给注解在自己编写的容器中写好解析器,开发的注解就像xml一样只有配置作用,有了解析器才会实现注入的功能。
解析器:得到实例bean的所有属性和字段,通过反射技术判断他们上面有没有注解(其实就是通过一个方法,即setter.isAnnotationPresent(ItcastResource.class)){//采用反射技术判断set方法上面是否有ItcastResource注解),如果有则通过反射技术得到这个注解(setter.getAnnotation(ItcastResource.class);//得到set方法上的这个注解),在判断注解上面有没有name属性,如果有就通过map找到对应的实例,通过属性或字段的set方法进行注入。
如果没有则按照默认的属性名或者字段名来查找是否有对应的bean,通过属性或者字段的set方法完成注入。如果没有就按照属性或字段的类型进行查找是否有对应的bean,通过属性或者字段的set方法完成注入。
3.AOP切面编程
依靠动态代理实现的AOP,动态代理中的一个重要的方法
Object proxyObject=Proxy.newProxyInstance(ClassLoader classLoader,Class[] interfaces,InvocationHandler h);
- Spring的实现原理剖析(自己总结版,大家来补充)
- 来总结一下在VC中调用COM组件的方法(大家来补充)(转载)
- 【总结】Spring原理剖析
- 【总结】Spring原理剖析
- ConcurrentHashMap实现原理总结--补充
- Spring核心技术原理剖析总结
- spring源码剖析(六)AOP实现原理剖析
- 关于block的总结,欢迎大家补充
- 自己简单实现Spring的IOC原理
- vim常用命令总结;方便自己查看,大家可以自己开个帖子,把自己常用的,或者经常忘的贴在上面方便自己的查找(不断补充中)
- ListCtrl 控件实现排序 类的封装(自己总结的 和大家共享)
- 最小二乘法多项式曲线拟合原理与实现(错误地方已经修改底层补充自己写的java实现)
- 小弟总结的array,vertor,arraylist,hashable,hashmap等几个易混淆的概念,请大家来指正,补充
- spring ioc原理(看完后大家可以自己写一个spring)
- spring ioc原理(看完后大家可以自己写一个spring)
- spring ioc原理(看完后大家可以自己写一个spring)
- spring ioc原理(看完后大家可以自己写一个spring)
- spring ioc原理(看完后大家可以自己写一个spring)
- 动画集合Animation
- poj3617
- 【小唐软件公众号文章】第二期:人工智能之“一路走来”
- could not autowire field 错误解决方式
- JBOSS最大连接数配置和jvm内存配置
- Spring的实现原理剖析(自己总结版,大家来补充)
- netty tcp option SO_RCVBUF
- SCU2016-01 M题
- Puppet Master 之 布娃娃的创建
- HDU 2852 KiKi's K-Number (树状数组+二分)
- AIDL使用笔记
- Program4_S
- C++ basic 02: 文件输入和输出
- HTML5的Video标签的属性,方法和事件汇总