Spring IOC(把对象交给容器来创建)

1.原理概述

是Spring 框架的核心,用于消减代码耦合问题 指的是创建对象控制权的翻转

2.Spring依赖注入

它是 spring 框架核心 IOC 的具体实现,具体点就是依赖关系的维护称之为依赖注入,我们的程序在编写时, 通过控制反转, 把对象的创建交给了 spring,但是代码中不可能出现没有依赖的情况。
 

<bean id="userDao" class="dao.UserMysqlDaoImpl"/>
<bean id="userService" class="service.UserService">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="userController" class="controller.UserController">
<property name="userService" ref="userService"/>
</bean>

//加载配置文件,初始化容器,启动容器
ApplicationContext Context = new ClassPathXmlApplicationContext("application.xml");

3.Setter注入

<!-- setter通过property 注入属性值,普通类型使用value -->

<bean id="user" class="entity.ComplexUser">
<property name="uname" value="王辉"></property>
<!-- 注入list -->
<property name="hobbyList">
<list>
<value>看书</value>
<value>学习SSM</value>
</list>
</property>
<!-- 注入map -->
<property name="recidenceMap">
<map>
<entry key="shenzhen" value="深圳"></entry>
<entry key="guangzhou" value="广州"></entry>
<entry key="tianjin" value="天津"></entry>
</map>
</property>
<!-- 注入set -->
<property name="aliasSet">
<set>
<value>小王</value>
<value>辉辉</value>
</set>
</property>

</bean>

4.依赖的自动装配

<!--在Spring容器中配置1名战士并完成武器和技能的依赖注入-->
<bean id="fighter1" class="entity.Fighter">
<property name="name" value="关羽"></property>
<property name="weapon" ref="weapon1"></property>
<property name="skills">
<list>
<ref bean="skill1"/>
<ref bean="skill2"/>
</list>
</property>
</bean>

 bean中也是需要为IOC中提供一个接口来将 这个属性注入进去 这个接口是set方

  

5.Spring为Bean定义了如下作用域

        1)singleton(单例)【无状态的Bean【只有操作方法,不能存放数据】,线程不安全】:在Spring 的IOC容器中只存在一个实例,所有对该对象的引用将共享这个实例。该实例从容器启动,并且因为第一次被请求而初始化之后,将一直存活到容器退出。也就是说,它与IOC容器“几乎”拥有相同的“寿命”。是scope的默认方式。

        2)prototype(多例)【有状态的Bean,线程安全】:Spring IOC容器将为每次获取实例的请求创建一个新的实例,每个实例都有自己的属性和状态[有自己的数据]。该实例由请求方自己负责当前返回对象的后继生命周期的管理工作,包括该对象的销毁。

        3)request:在一次Http请求中,容器会返回该Bean的同一实例。而对于不同的Http请求则会产生新的Bean实例。当请求结束后,该实例也将会被销毁。         

        4)session:在一次Session(会话)中,容器会返回Bean的同一实例。对于不同的会话则会创建新的实例。当会话结束后,该实例也将被销毁。

6.Spring框架中定义了一系列注解

        配置Bean的注解:@Component:可以作用在任何层次上(除了这三层之外的一些对象比如工具类) @Repository:用于数据访问层(DAO) @Service:用于业务逻辑层(Service) @Controller:用于控制器层(Controller) @Configure:用于配置作用的类

        完成依赖注入的注解:@Autowired:通过该注解可以消除setter和getter方法,默认按照Bean的类型进行装配 @Resource:和@Autowired功能是一样的,区别在于该注解默认是按照名称来装配注入的,通过name来指定Bean实例名称 @Qualifier:该注解与@Autowired注解配合使用,当@Autowired注解需要按照名称来装配注入时,使用该注解指定Bean实例名称

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值