IOC(Inversion(反转)Of Control):控制反转;
控制:资源的获取方式;
主动式(要什么资源都自己创建即可):
BookServlet{
BookService bs=new BookService();
AirPlane ap=new AirPlane();//复杂对象的创建是比较庞大的工程
}
被动式(资源的获取不是我们自己创建,而是交给一个容器来创建和设置):
BookServlet{
BookService bs;
public void test01(){
bs.checkout();
}
}
容器:管理所有的组件(有功能的类);假设,BookService受容器管理,容器可以自动的探查出哪些组件(类)需要用到另写组件(类);容器帮我们创建BookService对象,并把BookService对象赋值过去;
容器:主动的new资源变为被动的接受资源;
DI:(Dependencey Injection)依赖注入;
容器能知道哪个组件(类)运行的时候,需要另外一个类(组件);容器通过反射的形式,将容器中准备好的BookService对象注入(利用反射给属性赋值)到BookServlet
只要是容器管理的组件,都能使用容器提供的强大功能
HelloWorld;(通过各种方式给容器中注册对象)
以前都是自己new对象,现在所有的对象交给容器创建;给容器中注册组件
框架编程的流程
1)、导包
核心容器
spring-beans-5.2.3.RELEASE.jar
spring-context-5.2.3.RELEASE.jar
spring-core-5.2.3.RELEASE.jar
spring-expression-5.2.3.RELEASE.jar
commons-logging-1.2.jar
Spring运行的时候依赖一个日志包,没有就报错
2)、写配置
spring的配置文件中,集合了spring的ioc容器的所有组件
创建一个Spring Bean Configuration File(Spring的bean配置文件)
3)、测试
new ClassPathXmlApplicationContext("spring-config.xml");意思是IOC容器的配置文件在类路径下
FileSystemXmlApplicationContext("F://spring-config.xml");IOC容器的配置文件在磁盘路径下
1)、组件的创建工作,是由容器完成
2)、容器中对象的创建在容器创建完成的时候就已经创建好了
3)、同一个组件在IOC容器中是单实例的,容器启动完成前就已经准备好了
4)、IOC容器在创建这个组件对象的时候,(property)会利用setter方法为javaBean的属性进行赋值
5)、javaBean的属性名是由什么决定的?
getter/setter方法是属性名;set去掉后面那一串首字母小写就是属性名