IOC简介
控制反转(IoC,Inversion of Control),是一种思想,指的是将创建对象的操作权交给容器,通过容器来装配和管理对象的创建。
依赖注入
IoC思想的实现方式之一是__依赖注入__(Dependency Injection,简称DI),依赖注入指程序运行过程中,若需要调用另一个对象协助时,无需在代码中创建被调用者,而是依赖外部容器,由外部容器创建后传递给程序。
依赖注入使spring的Bean之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起。
容器加载配置文件的两种方式
__ApplicationContext__和__BeanFactory__是容器的两种方式,提供了高级IOC的配置机制。
ApplicationContext是BeanFactory的一个子类,有更多的功能,推荐使用。BeanFactory可以实现延迟加载,将配置文件加载到spring容器时,不进行对象创建,getBean时再创建,可以应用在内存较小的环境里,但一般不用它。
如下图,第二个方法不会出现StudentService构造函数打印输出的内容,而一则会。
Bean装配的三种方式(创建对象的三种方式)
Bean装配指ioc容器将对象创建好并传递给使用者的过程,是依赖注入的一部分。
Bean装配由三种方式:
1,默认方式
是通过__反射__实现的,使用配置文件指定类,spring ioc容器会调用bean的无参构造方法来创建对象,所以务必保证这些bean有无参构造方法。
2,实例工厂
3,静态工厂
配置文件的区别:
测试用最普遍的applicationContext的方式:
Bean的作用域
使用springioc为我们创建对象的时候,可以设定该对象的作用域,默认是单例的。
1,singleton:单例模式。即在一个Spring ioc容器中,使用singleton定义的Bean是单例的,只有一个实例。
2,prototype:原型模式。即每次使用getBean方法获取的同一个bean实例都是一个新的实例。(默认是singleton)
3,request:对于每次HTTP请求,都将会产生一个不同的Bean实例。
4,session:对于每个不同的HTTP session,都将产生一个不同的Bean实例。
5,application:在一个web应用中产生一个Bean实例,就相当于在一个ServletContext中只有该bean的实例。
6,websocket:在一个websocket中会产生一个bean实例。
Bean的生命周期
配置
在bean中添加方法
关闭容器(关闭时才会调用destory-method)
将创建好的对象传递给过来的三种方式(依赖注入的三种方式)
springioc容器初始化好bean的实例对象之后,会对对象的属性进行初始化,初始化的过程依然是由容器自动完成,这就是依赖注入。spring里面常用的注入方式有三种,setter方法注入,构造方法注入,特定接口注入(污染,不再使用)。
xml方式
1,setter注入
使用了 private Class class这种方式来创建bean对象后,需要配置文件中添加相关配置,告诉容器调用set方法将对象注入进去。
2,构造方法注入
不用set,get,带参数的构造方法,在初始化的时候就注入,也要加配置。
优点:修改xml之后,不需要重新编译代码;减少侵入性。
缺点:冗余,麻烦
注解方式
@Component、@Service、@Repository、@Controller
@Autowired 根据类型装配
@resource 根据名字装配
@scope(配置作用域)
优点:配置方便,使用直观
缺点:出现在了代码中,侵入性强
可以两种都用,xml优先级高于注解