一、结构
1.1,结构
Spring的核心是Core Container 核心容器,里面加载着Bean和其它容器,它是用来处理对象的,是核心。
1.2,IOC控制反转
IOC控制反转指在创建对象时,从new一个对象转为外部提供一个对象。这因为如果每次都new一个对象,那么每次对于这个对象的修改都要修改全部代码,耦合度太高。为了降低耦合度,将对象的创建控制权从程序转移到外部,这就叫IOC控制反转。
IOC控制反转由new一个对象转变为从外部提供一个对象。这里的外部指的就是Cor Container核心容器中的IOC容器,所有的对象都在IOC容器中创建并初始化,在需要的时候传入程序,而这些在IOC容器中创建并初始化的对象被称作bean
DI依赖注入
如果IOC容器中的bean存在依赖关系,那么IOC容器就会将这些bean绑定在一起,这样将需要使用的对象传入程序中,就不用担心这个对象有其它需要使用的依赖对象还在IOC容器中没传入的情况。
1.3 IOC实现过程
1,在pom文件里导入spring的依赖坐标
2,在项目里定义Spring管理的类
3,在resource中创建applicationContext.xml配置文件,这就是IOC容器,用来管理bean。
4,在main方法中初始化IOC容器,通过容器获取bean。
1.4,DI依赖注入的实现
1,在类文件中
2,在applicationContext.xml配置文件中配置两个相关联的类的关系。因为是bookService用到bookDao,所以在bookService的bean标签中配置,property 的name指的是bookService类中的属性 bookDao,而ref 中的bookDao指的是它依赖的类bean 的id是bookDao。
1.5 bean的配置和理解
1.5.1,bean可以通过在name起别名,一样可以找到它,对象的实例就是在IOC容器里创建的
注意如果Spring运行出错,从最后一行错误提示往上分析。
1.5.2,Spring默认造出来的bean都是单例的,不想要单例需要手动修改scop=“prototype”
bean默认为单例的原因是IOC容器一开始就是想要造出可以复用的对象,一个对象把实例创建出来之后就不要再改了可以反复用,所以才使用的单例。所以那些需要给属性赋值的实体类常常不适合交给容器进行管理。
1.6,实例化bean的三种方法:
1.6.1,使用构造方法实例化bean,注意要求是无参的构造方法(最常用)
1.6.2,使用静态工厂实例化bean
工厂:一种专门用来创建类的类,里面有返回值是类的类型的方法。如:
public class SchoolFactory{
public Student student(){
return new Student();
}
}
而静态工厂是里面的方法是static静态方法,这样不需要创建实例就可以调用这个方法。
如何使用静态方法实例化bean呢?
1,定义一个用来创建类的静态工厂
2,在applicationContext.xml中修改配置文件,class是工厂类的类名,而factory-method
是它的实现方法的名字getOrderDao
3,在main方法中正常创建IOC容器,使用类对象就可以。
1.6.3,实例工厂实例化bean
实例工厂里面的方法不再是static静态方法,而是普通方法,这样需要先创建工厂的实例再调用这个方法。在xml文件中先创建工厂的bean,再创建UserDao的bean。
1.6.4,FactoryBean实例化bean
建工厂的时候implement 一个Factory Bean 的接口,<>中是你要造的类名,然后点击红线实现方法,第一个方法返回你要造的类实例,第二个方法返回类.class。
这样在xml配置文件里就可以和原来一样直接id+class了,不过要注意id是userDao但class是UserDaoFactoryBean
1.7 Bean的生命周期控制
1.7.1,在类中定义初始化init()方法和销毁destroy()方法,再去xml配置文件中对它的bean配置init-method和destroy-method(常用)
1.7.2
在定义类的时候实现InitializingBean和DisposaBean的接口
1.7.3 bean的生命周期
1.7.4,bean的销毁