a'd's'fa's'd

Spring核心功能 DI(IOC) 何谓DI(IOC) DI(依赖注入)是spring的核心功能之一。 Dependency Injection 和 Inversion of Control 其实就是一个东西的两种不同的说法而已。本质上是一回事。Dependency Injection 是一个程序设计模式和架构模型, 一些时候也称作 Inversion of Control,尽管在技术上来讲,Dependency Injection 是一个 Inversion of Control 的特殊实现,Dependency Injection 是指一个对象应用另外一个对象来提供一个特殊的能力,例如:把一个数据库连接以参数的形式传到一个对象的结构方法里面而不是在那个对象内部自行创建一个连接。Inversion of Control 和 Dependency Injection 的基本思想就是把类的依赖从类内部转化到外部以减少依赖。 应用Inversion of Control,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,Inversion of Control 是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。IoC是通过处理对象定义依赖的方式来工作,也就是说,一起协作的对象,要么通过构造函数参数来获得,要么在构造之后给对象设置属性来获得,要么从工厂方法返回的方式来获得。容器先创建bean,然后再注入这些依赖。这个获取过程是完全反过来的,所以命名为控制反转(IoC)。 DI能够删除任何特定的依赖于别的类或第三方接口的类,并且能够在初始化构造时加载要依赖的类。DI的优点是你可以依赖类的实现而并不需要更改你的代码。你甚至可以在接口不变的条件下重写依赖的实现而不用改变你的编码,即面向接口的编程。

DI实现方式 构造器注入:通过构造器注入,能使当前实例作为不可变对象,并且能确保所有需要的依赖都是非空的.更进一步,构造器注入返回给客户代码的是一个完全初始化状态的对象. Setter方法注入:Setter方法注入作为构造器注入的补充实现.能注入可选的有默认值的依赖.否则,会随处校验依赖的非空与否. 自动装配 @Autowired:即通过注解自动装配,默认方式是byType. @Resource:即通过注解自动装配,默认方式是byName. @javax.inject.Inject:类似与@Autowired @Qualifier:指定实现不同的限定符,在具体注入时,通过该注解具体限定 Spring容器会在容器加载时校验依赖非空和循环依赖.在初始化Bean时,Spring会在bean真正创建之前尽可能晚的设置属性和解决依赖关系.

bean bean定义和依赖实现方式 XML文本配置文件 通过上面的方式来定义一个bean,通过在bean中添加依赖来达到目的.

主要依赖方式有:

构造器注入. Setter属性方法注入 通过XML配置文件构造Spring beans和依赖缺失了编译时的类型检查,比如构造器参数的类型错误,甚至是构造器错误的参数只有在ApplicationContext容器在运行时构造时才会检查。

使用注解 通过配置自动注解扫描的根包,并且在bean上使用注解@Component(@Service,@Repositoty,@javax.inject.Named)等标示他是一个bean.

<context:annotation-config/>  
<!--    使用自动注入的时候要  添加他来扫描bean之后才能在使用的时候   -->
<context:component-scan base-package="com.wyp.module.service,com.wyp.module.dao"/>
复制代码

通过如上配置自动扫描根包下的类,并作自动注解绑定

解释下context:annotation-config/:

它的作用是隐式的向Spring容器注册

AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor, PersistenceAnnotationBeanPostProcessor, RequiredAnnotationBeanPostProcessor 这4个BeanPostProcessor.注册这4个bean处理器主要的作用是为了你的系统能够识别相应的注解。 如果想使用@Autowired,@PersistenceContext,@Required,@Resource,@PostConstruct,@PreDestroy,就需要按照传统声明一条一条去声明注解Bean,就会显得十分繁琐. 因此如果在Spring的配置文件中事先加上context:annotation-config/这样一条配置的话,那么所有注解的传统声明就可以被忽略,即不用在写传统的声明,Spring会自动完成声明。

解释下context:component-scan/:

转载于:https://juejin.im/post/5b73a9e45188256119511767

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值