谈一下自己的理解,有错误的地方大家随时指正
控制反转:
控制:就是从前创建对象是我们自己创建对象,现在由IOC容器创建对象,
反转:依赖的反转,从前我们在A中用B的方法和属性要先有A再把属性set进去反转之后是我们要先有B再将属性注入到A中
对象的创建权交给了spring控制了对象的创建权
ioc创建bean管理bean
常用的三个实现类:
ClassPathXmlApplicationContext 它可以加载类路径下的配置文件
FileSystemXmlApplicationContext 它可以加载磁盘任意路径下的配置文件(必须有访问权限)
AnnotationConfigApplicationContext 它是用于读取注解创建容器的
他们是ApplicationContext接口的实现类,在上面是BeanFactory
实例化bean对象
spring默认采用无参构造方法来实例化bean对象
spring.xml中配置需要实例化的对象
<bean id="唯一标识符" class="类的全限定名">
id =key 给对象设置一个唯一标识符
class= 实现类 需要实例化的类的全限定名----Map中的value
context.getbean拿到实例化对象
getbean可以通过名字和类型来拿,bean,一般用类型来获取
autowired默认通过类型来获取
一般用无参构造方法来实例化bean对象。有参构造方法则需要自己指定
静态工厂实例化对象:自己创建的对象添加到容器里面,用静态工厂
实例化工厂实例化对象:在静态工厂基础上要先拿到实例化工厂对
象,因为不是静态不能直接拿到
bean的生命周期:
scope默认单例:
singleton读取配置文件就创建了对象 可以通过懒加载设置获取对象在设置
只要容器存在bean就会一直存在。当容器销毁时才会销毁bean
,prototype设置为多例模式:默认是获取对象时创建bean
bean使用就会一直存在。不常用的时候会被垃圾回收机制回收掉
还有init(),destroy()要配置才可以使用
我们传统用new一个对象对象是我们主动创建出来的。
而ioc专门有一个容器来控制对象的创建,IOC容器来控制对象的创建
依赖注入
我依赖于你,就把你注入给我,
构造方法(),setter()方法
基于构造方法
Constructor
先读取配置文件初始化ioc
根据类型获取实例化对象
name:表示对应的pravite属性名称 ref:bean对象的id
bean 告诉spring需要初始化的对象
基于setter方法:常用
property
常用注解
@controller:控制层
@service:业务逻辑层
@repository:数据访问层
@compoment:普通的类
通过以上注解就能实例化bean
@configuration------配置类
@componmentscan-----包扫描
<context:compoment-scan base-package=" 要扫描的包名">
依赖注入
@autowired
(写在注入的属性上会自动找到他的实现类)
自动通过类型注入,如果找到多个会再按照名字注入
配合qualifier可以选定某个名字注入
@resource
是jdk中的注解也可以实现自动注入
()中不写默认按照名字来注入,找不到就按类型来@scope:作用域
通用性来说resource更强但一般用autowired
@bean-----可以将指定的bean添加到spring的容器中,将别人写的类加到容器中
@import-----将配置类引入配置类
@value可以给属性设置默认值
@value(12)
int i;//i的默认值为12
junit
@RunWith:集成运行环境
@ContextConfiguration({classes:spring.class})--读取配置类
把想测试的类注入进来