Spring Bean的注入方式 & 在代码中获取bean的方式

Spring Bean的注入方式

依赖注入是一个让对象只通过构造参数,工厂方法的参数或者配置的属性来定义他们的依赖的过程。

依赖注入主要使用以下几种方式:

1. 基于构造函数的注入

基于构造函数的依赖注入是由IoC容器来调用类的构造函数,构造函数的参数代表这个Bean所
依赖的对象。


在上面代码这种情况下,容器可以通过使用构造函数参数的 type 属性来实现简单类型的匹配。


或者使用 index 属性来指定构造参数的位置。


2. Setter方式注入

基于Setter函数的依赖注入则是容器会调用Bean的无参构造函数,或者无参数的工厂方法,然后再来调用Setter方法来实现的依赖注入。



3. 工厂注入

静态工厂:无需创建工厂类实例就可以进行注入



实例工厂

public class CarFactory{  
    public Car createHongQiCar(){  
        Car car=new Car();  
        car.setBrand("红旗CA72");  
        return car;  
    }  
}  
<bean id="carFactory" class="cn.lovepi.chapter02.reflect.CarFactory"/>  
<bean id="car" factory-bean="carFactory"  
     factory-method="createHongQiCar">  
</bean> 
4.注解注入

基于注解的组件(比如使用 @Component , @Controller 等)或者在配置了 @Configuration 的类上面使用 @Bean 的方法


总结:

通常比较好的方式是通过构造函数注入必要的依赖通过Setter方式来注入一些可选的依赖。其中,在Setter方法上面的 @Required 注解可用来构造必要的依赖。Spring推荐基于构造函数的注入,因为这种方式会促使开发者将组件开发成不可变对象而且确保了注入的依赖不为 null 。而且,基于构造函数的注入的组件被客户端调用的时候也是完全构造好的。当然,从另一方面来说,过多的构造函数参数也是非常差的代码方式,这种方式说明类貌似有了太多的功能,最好重构将不同职能分离。 基于Setter的注入只是用于可选的依赖,但是也最好配置一些合理的默认值。否则,需要对代码的依赖进行非NULL的检查。基于Setter方法的注入有一个便利之处在于这种方式的注入是可以进行重配置和重新注入的。 依赖注入的两种风格适合大多数的情况,但是有时使用第三方的库的时候,开发者可能并没有源码,而第三方的代码也没有setter方法,那么就只能使用基于构造函数的依赖注入。


Spring在代码中获取bean的几种方式

方法一:在初始化时保存ApplicationContext对象 方法二:通过Spring提供的utils类获取ApplicationContext对象 方法三:继承自抽象类ApplicationObjectSupport 方法四:继承自抽象类WebApplicationObjectSupport 方法五:实现接口ApplicationContextAware 方法六:通过Spring提供的ContextLoader

获取spring中bean的方式总结:

方法一:在初始化时保存ApplicationContext对象

[html]  view plain  copy
  1. ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");   
  2. ac.getBean("beanId");  

说明:这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。

方法二:通过Spring提供的工具类获取ApplicationContext对象
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值