控制反转 inversion of control:
javabean以前由开发人员用代码管理维护,现在对象的实例化和销毁等全部由spring容器管理,实现控制的反转。
这是一种编程思想,就是说一些非核心的代码由框架自动实现管理,开发人员专注于业务逻辑。
依赖注入 dependency of injection :
对象内部需要用到其他javabean对象时,使用注入的方式引入。
理解
将bean的控制权移交给Spring容器 ,由Spring容器实现对 bean的管理。IOC 实现的过程需要对bean属性实现注入,此时就需要用到DI。IOC与DI: 相辅相成、 相互合作,这是同一过程的不同角度的不同描述。Ioc和DI,并不算一种技术,是程序开发中的一种思想,利用spring的控制反转和依赖注入,就不需要那么多代码,也不需要考虑对象间的耦合关系,由容器提供了对对象的管理,降低了代码开发和维护的复杂度。总:降低耦合,简化开发。
Ioc实例化对象的三种方法
1.构造器方法 。 bean必须有空构造器。
2.静态工厂方法。 spring不创建, 由 工厂类提供静态方法创建bean
3.实例化工厂方法 。 工厂类提供方法创建bean
注入的四种方法
1. setter方法注入。 注入的bean需要有相应的setter方法
2. 构造器方法注入。注入的bean需要有相应的带参构造器
3. 静态工厂方法注入
4. 实例化工厂注入。
注意加入循环依赖,不可构造器方法注入,使用setter方法注入
注解方式注入
1.加入context命名空间 2. 加入 <context:annotation-config/> 配置
@Autowired 属性和set方法上 默认按照type类型寻找注入资源,可以使用@Qualifier来制定按照name注入
@Resource 属性和set方法上默认按照name寻找注入资源,没有那么属性按照type注入
自动扫描包: <context:component-scan base-package=“包路径”
不同层使用不同注解
Dao 层: : @Repository
Service 层: : @Service
视图控制层: : @Controller
bean作用域问题
1. singleton 作用域
单例,默认,lazy-init懒加载
提前发现潜在的配置问题
加快程序运行期速率
2. prototype
非单例,每次创建新的bean。
3. web作用域
request作用域
session作用域
bean的生命周期
定义 初始化 使用 销毁
定义: 配置文件
初始化:配置文件中的init-methd 或者 InitializingBean接口
使用:beanFactory ApplicationContext
销毁:配置文件的destroy方法 或者 AbstractApplicationContext的close方法。