Spring 的 IOC 容器理解

        Spring IOC字面翻译过来的意思就是控制反转的缩写,我们可以看成是,在未接触Spring的时候,我们项目中的对象是都需要我们手动的去创建,然后调用他们的set方法进行属性赋值;这些对象的生命周期是由开发人员来进行维护;接入Spring之后呢,交给Spring框架来进行处理,由Spring来进行管理这些bean的生命周期(bean生命周期)。那这些bean是怎么被Spring所知道的呢;有两种方式,一种是通过注解的方式,一种是通过基于XML的方式:

1、基于XML方式配置

基于XML配置Bean时,Spring通过<bean>配置来实例化、设置bean的属性以及设置bean间的相互依赖性。一个<bean>通常需要定义id和class属性。class属性是必须的,不然Spring怎么知道是哪个呢。id不是必须的,不过如果配置文件中配置的其他bean要引用该bean,则id也是必须的,通常都加上。

<bean id="user" class="com.demo.model.UserBean"></bean>

2、基于注解的方式

        我们使用@Component注解在对应 类声明处对类进行标注,它可以被Spring容器识别,Spring容器自动将POJO转换为容器管理的bean。它和<bean id="XXX" class="全类名"></bean>是等效的。

        Spring注解:除了@Component以外,Spring提供了3个功能基本和@Component等效的注解,它们分别用于对DAO、Service及Web层的Controller进行注解,所以也称这些注解为Bean的衍型注解:
@Repository:用于对DAO实现类进行标注;
@Service:用于对Service实现类进行标注;
@Controller:用于对Controller实现类进行标注;

        如何让Spring知道哪些包下的bean需要进行管理,需要判断哪些包我们需要进行扫描查找,是通过配置context,component-scan base-package扫描对应的包及下面的子包;

<context:component-scan base-package="XXXX"/>

        通过扫描到这些包下有对应的注解:@controller、@service、@component,说明这些类是要交给Spring来管理,管理他们的生命周期;Spring会调用这些类的无参构造方法、set方法、init方法,完成之后会放在Spring的applicationcontext里面,(上下文中),可以理解为一个个的map,key的话如果未指定名字,key的话,就是这些类的类名首字母小写为名字;放到map中之后,我们后续可以通过@Autowired注解来调用: 就可以直接使用,不用自己手动去new StudentService的对象,这个Spring直接帮我们new好了对象,我们就可以直接调用他的对应方法,这就是依赖注入,就是我需要的时候,直接到Spring中去找,找到之后,直接就可以用;(spring中,对象的作用域scrop 默认是单例模式,也就是 共用 同一个对象;也可以手动设置原型类型(bean的作用域

        例如:我们的SudentController要用到StudentService中的方法,直接在SudentController中通过定义这个属性

Private StudentService  sudentService;

       接口注解的话,我们会在接口的各个实现类上面加上@service注解,在service层注入这个接口的时候,Autowired会通过ByType的方式,会根据接口的类型去map中去找对应的实现类;那如果有多个实现类的时候,就会无法配对上到底是哪个实现类,这样就会导致无法找到;没有找到的话,直接找会报错;

        可以通过@Autowired加上后面加上别名注解@Qualifier(value = “实现类别名”) ,来指定你要注入的是哪个实现类,那如果只有一个的话,就不需要进行;他还会根据实现类来匹配一次,来找对应的实现类(这样的话,就会衍生出,后续注入时,是通过byType的方式还是ByName的方式查找)

        @Resource 是JDK1.6支持的注解, 默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,默认用实现类首字母小写的方式进行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值