Spring IOC

Java---SpringIoC(控制反转)
******简单明了的解释:
控制反转又称为依赖注入,主要为了降低类之间的耦合度,类A依赖类B的时候我们按传统写法就需要在类A里面调用类B对象的方法,而用SPRING的话,就相当于提供了一个接口,在类A里面调用这个接口就可以得到类B对象,不用NEW出类B的对象来。利用接口的原理来降低了耦合度(如果你熟习接口的设计和使用就会很清楚)。
而为了实现上述原理,我们把他写成配置文件,然后在程序运行时用反射的方式来加载这个配置文件(用spring时就是用的反射机制运行时调用),找到要使用的类,并由spring给你生成对象。这样就OK了。
最后在总结下这两个名词。
控制反转,就是交换控制权的意思,比如我类A需要用到类B的时候,具体的实现方式是在类B的某个方法里,也就是说类B控制着这个业务的具体实现。
而现在用IOC以后,类B交出控制权,类A来进行控制,类A里只需要调用一个接口的方法,不管你这个方法的具体实现是由类B的对象来实现,还是由其他类的对象来实现,反正类A调用这个接口的这个方法就可以搞定他需要实现的业务内容,这样一来,类A它看上去就得到了实现某个业务的控制权。
而依赖注入这个词则体现得更加专业一点,就是讲在我的程序里,我从来不去构造(new HelloWorld()这样的方法)任何对象,只是在需要用到(也就是依赖)某个对象的时候,我就用spring给他注入这个对象。这个注入的方式也就降低了程序的耦合度。
*******
一,IoC应用XML
1.依赖注入:构造函数,属性注入,(Spring不支持接口注入,接口注入属于属性注入一种)
2.BeanFactory一般称为IoC容器,是Spring框架最核心的接口,面向Spring本身,懒加载
3.ApplicationContext应用上下文,又称Spring容器,面向Spring框架开发者,立即加载
4.BeanDefinition的Resource定位
             1.寻找入口
             2.获得配置路径
             3.开始启动:SpringIoC容器对Bean配置资源的载入是从refresh(模板方法)开始的。refresh:销毁原有的IoC容器,重建
             4.创建容器
             5.载入配置路径
             6.分配路径处理策略
             7.解析配置文件路径
             8.开始读取配置内容
             9.准备文档对象
5.Bean配置信息的解析
             1.分配解析策略
             2.将配置载入内存
             3.载入Bean元素
             4.载入<property>
             5.载入<property>元素
            6.载入<List>子元素
6.Bean注册到容器
            1.分配注册策略
            2.向容器注册
二,IoC源码分析
1.Java注解Annotation:用于为程序元素设置元数据(Spring支持用Java注解来描述配置,但是必须在xml文档里加入上下文扫描(注解)包范围)
类级别注解:@Component @Respository @Controller @Service @ManagedBean @Named
类内部注解:@Autowire @Value @Resource
2.元数据(metadata)(中介数据)(中继数据):为描述数据的数据,多用来描述数据属性
3.注解需要特定的工具来处理,执行,访问。这些工具通称为APT
4.@Override:限定重写父类的方法(父类必须有这个方法,否则出错)
5.@Deprecated:过时
6.@Component:标注一个普通的Spring Bean类
7.@Controller:标注一个控制器组件
8.@Service:标注一个业务逻辑组件类
9.@Repository:标注一个DAO组件类
10.<include-filter.../>:用于指定满足该规则的Java类会被当成bean类处理
11.<exclude-filter.../>:用于指定满足该规则的Java类不会被当成bean类处理
12.@Scope:指定bean的作用域
13.@Resource:配置依赖
14.使用@AutoWired 来指定自动装配,使用@Qualifier实现精确的自动装配
15.Ioc容器初始化(不关心BeanFactory):注册过程就是IoC内部维护一个HashMap(存Bean)来保存得到的BeanDefinition的过程
SpringIoC容器属性注入:对于集合属性,解析为目标类型的集合后直接赋值
                                       对于非集合类型的属性,使用反射机制,通过属性的getter,setter取值赋值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值