spring IOC

控制反转(Inversion of Control,英文缩写为IoC)把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专用术语。

在了解控制反转的时候 ,首先需要知道什么是控制 :传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建 从这里我们可以看到,IOC 容器控制了对象的外部资源的获取(对象 或文件等资源,一般通过上下文来查找资源)。 什么是反转呢,或者说,什么进行了反转,在传统应用程序中,由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是通过容器来创建及注入依赖对象。因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转 ,依赖对象的获取被反转了。
IOC把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是 松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。其实IoC对编程带是从思想上的一种转变,将程序发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。

可以把IoC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的,然后利用Java 的“反射”编程,根据XML中给出的类名生成相应的对象。从实现来看,IoC是把以前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性

IOC 被认为是任何容器都需要提供的基本功能之一,它主要有两种形式:依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)
在依赖查找中,容器向其管理的组件提供了回调方法,而组件通过这些回到方法与容器进行交互并显示低获取他们的依赖项,这种情况下,一般使用一个查找上下文来访问依赖组件以及容器管理的其他资源

在依赖注入中,组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。容器全权负责的组件的装配,它会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。通过JavaBean属性注射依赖关系的做法称为设值方法注入(Setter Injection);将依赖关系作为构造函数参数传入的做法称为构造器注入(Constructor Injection) 一般来说,很少在组件内执行显式依赖查找,大多数都是通过构造函数或setter方法在创建组件的时候注入依赖项

spring IOC

简单来说 ,spring IOC就是把所有的类都在spring容器中登记,当你告诉spring你是个什么,你需要什么后,spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,而现在所有对象都是被spring控制

声明bean的注解:

@component 组件 没有明确的角色
@service 在业务逻辑层使用
@repository 在数据访问成(dao层 )使用
@controller 在视图层使用 (springMVC)

注入bean的注解,一般情况下通用
@Autowired spring提供的注解
@inject jsr-330提供的注解

编写功能类的bean 流程

1.使用@service注解声明当前类是spring管理的一个bean
2.使用autowired 将当前的实体bean注入到service中

配置类的流程

@configuration 声明当前类是一个配置类

使用@componentscan ,自动扫描报名下所有使用 @service @component @repository @ controller 的类 并注册为bean
除了使用componentscan 注入bean 还可以通过 annotationconfigapplicationcontext 作为spring容器,接受一个配置类作为参数,并返回配置类的并 通过返回的并来对配置类做操作

ConfigurableApplicationContext run =  SpringApplication.run(Application.class, args);
		xxxClass xxx=(xxxXlass) run.getBean("xxxxx");

Java 配置

Java配置是通过@configuration 和 @bean 来实现的
@configuration 声明当前类是一个配置类,相当与一个spring配置的xml 文件
@Bean 注解在方法上,声明当前方法返回值为一个bean

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值