一.控制反转
1.控制反转的定义
控制反转:IOC(Inversion Of Control)
定义:把对象的创建、初始化、销毁等工作 交给 spring容器来做,由spring容器来管理对象的生命周期。 IOC不是一种技术,只是一种开发思想,一种重要的面向对象编码的法则。可以设计出松耦合、更加优良的系统程序。
IOC包括两部分:依赖注入(DI) 和 依赖查找。
spring的注入就是在实例化这个类的时候,由外部的容器来设置这个对象的值。
2.如何理解控制反转:
考虑一下常规情况下的应用程序,如果要在A里面使用C,一般是直接去创建C的对象,也就是说,是在A类中主动去获取所需要的外部资源C,这种情况被称为正向的。那么什么是反向呢?就是A类不再主动去获取C,而是被动等待,等待IOC/DI的容器获取一个C的实例,然后反向的注入到A类中。
根据上面的讲述,应该能看出来,依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。
这样就有效的分离了对象和它所需要的外部资源,使得它们松散耦合,有利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
属性的注入:
// 用户
public class User {
private int id;
private String name;
private List<String> scores;
private Map<String, Object> info;
// gettersetter方法
}
// 车
public class Car {
private String carName;
}
// 人
public class Person {
private String name;
}
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
注入其他类:
<!-- 通过 ref 指向其他bean的引用 -->
<property name="car" ref="myCar"></property>
<bean id="myCar" class="com.cbb.bean.Car">
<property name="carName" value="bwm"></property>
</bean>
二.Spring容器中的Bean
对于开发者来说,开发者使用Spring框架主要是做两件事:①开发Bean;②配置Bean。对于Spring框架来说,它要做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法完成“依赖注入”——这就是所谓IOC的本质。
1.Bean的作用域
当通过Spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域。Spring支持如下五种作用域
- singleton: 单例模式,在整个Spring IoC容器中,singleton作用域的Bean将只生成一个实例。
- prototype: 每次通过容器的getBean()方法获取prototype作用域的Bean时,都将产生一个新的Bean实例。
- request: 对于一次HTTP请求,request作用域的Bean将只生成一个实例,这意味着,在同一次HTTP请求内,程序每次请求该Bean,得到的总是同一个实例。只有在Web应用中使用Spring时,该作用域才真正有效。
- 对于一次HTTP会话,session作用域的Bean将只生成一个实例,这意味着,在同一次HTTP会话内,程序每次请求该Bean,得到的总是同一个实例。只有在Web应用中使用Spring时,该作用域才真正有效。
- global session: 每个全局的HTTP Session对应一个Bean实例。在典型的情况下,仅在使用portlet context的时候有效,同样只在Web应用中有效。
如果不指定Bean的作用域,Spring默认使用singleton作用域。prototype作用域的Bean的创建、销毁代价比较大。而singleton作用域的Bean实例一旦创建成果,就可以重复使用。因此,应该尽量避免将Bean设置成prototype作用域。
2.bean的装配
- 配置文件xml的装配方式
1.属性注入需要有 对应的 setter方法
2.注入的其他类 bean要有无参构造方法
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
</beans>
- 注解的装配方式
@Component // 是组件的通用形式,
@Controller //控制层, 表示web层组件
@Service //业务层
@Repository(“userDao”) //持久层 (“userDao”): bean的
@Autowired //根据类型进行装配 会到springbean中根据类型去查询并且进行注入问题 如果说有两个类型都匹配用 @Qualifier指定bean的名字
@Resource // 会根据属性的名字去查找对应的 bean,如果查找不到,则再根据类型进行匹配
390

被折叠的 条评论
为什么被折叠?



