1.什么是Spring?
Spring是一个开源的轻量级的应用开发框架,其目的是用于简化企业级应用程序开发,降低侵入性。
Spring容器实现了IOC和AOP机制,这些机制可以简化Bean对象创建和Bean对象之间的解耦。
Spring容器有BeanFactory 和 ApplicationContext两种类型。
2.javaBean:符合一定规则的java对象。
符合如下规则的java对象称为javaBean:
1. 必须有包。
2. 必须有无参构造器。
3. 必须实现序列化接口。
4. 有getXXX setXXX声明的Bean属性方法。(没说必须有)
5. - getxxx和setxxx是Bean属性,不是对象属性。
- boolean类型的get属性,可以声明为isXXX。
Spring IOC:用于管理(创建,修改属性等)javaBean对象。
可以修改Bean属性。 可以作为java Bean的工厂使用。
3.Spring可以管理Bean属性。
Bean属性注入:修改“Bean属性”不是对象的属性!实际上是调用了setXXX方法。修改了Bean属性。
4.工厂方法:
简单理解就是利用方法创建对象,将对象复杂的创建过程封装到方法中,使用时候调用方法就重用了复杂的的对象创建过程,简洁的得到对象。
静态工厂方法:
例,DBUtils,getConn(){}
Connection conn=DBUtils.getConn(){};
动态工厂方法:
Statement st=conn.createStatement();
5.Spring创建对象的三种方式:
Spring帮助创建java Bean对象,Spring支持3中对象创建方式:
1.利用构造器创建java Bean
//初始化Spring容器,Spring会根据xml文件自动创建java bean 对象
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
//从Spring容器中获取Spring创建的Bean对象,"Car"是在xml文件中定义的id属性值
Car car=(Car)ac.getBean("car"); applicationContext.xml中:
<!-- 告诉Spring帮助创建一个Car对象,bean标签用于声明创建javaBean对象-->
<bean id="car" class="spring.day01.Car"></bean>
2.利用静态工厂方法创建对象
<!-- 利用工厂方法创建java Bean -->
<bean id="cal" class="java.util.Calendar" factory-method="getInstance"></bean>
//初始化Spring容器
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
//获取java Bean对象 Calendar cal=(Calendar)ac.getBean("cal");
System.out.println(cal.toString());
3.利用实例工厂方法创建对象
5.Bean的作用域
- Spring在默认情况下,其中Bean都是单例的!
- 单例:在软件中一个永远唯一的对象,称为单例。
6.Bean 的生命周期管理
Spring中的Bean对象,由Spring控制对象的创建和销毁,这个过程称为Spring中Bean对象的生命周期管理。
- 单例对象 singleton(单例)
-
- 创建:在Spring容器初始化时候,创建单例对象,如果设置了init-method属性,则在创建对象以后,调用初始化方法。
- 使用:每次调用getBean方法时,返回的都是同一个对象。
- 销毁:在Spring容器关闭的时候,会自动销毁单例对象,如果指定了destroy-method属性,则会在销毁之前执行 销毁 方法。
- 多例对象 prototype(原型)
-
- 创建:在调用getBean方法的时候,创建对象,如果设置了init-method属性,则在创建对象以后调用初始化方法。
- 使用:每次调用getBean时候,返回的都是新对象
- 销毁:Spring不管!!也不会调用destroy-method!
<bean id="wolf" class="spring.day01.Wolf" init-method="init" destroy-method="destroy"></bean>
uri:统一资源标识符,uri可能在互联网上找不到。
url:互联网上一定存在,可以找到,统一资源定位符,任何一个url都是uri。
7.Bean生命周期与延迟实例化
- 单例对象默认情况下在容器启动时立即初始化。
-
- 如果这些对象内存耗用高,则启动会很慢。
对于内存占用高,使用少的对象,可以设置延迟(懒惰,按需)实例化。
在Bean标签上,使用懒惰属性设置就行。
设置了懒惰属性为true,lazy-init="true".
- 容器启动时,bean不实例化。
- 在第一次getBean()时实例化。
- 是单例Bean对象。
多例对象没有延迟初始化问题。
2.IOC(Inversion of Control) 控制反转
IOC是指程序中对象的获取方式发生反转,由最初的new方式创建,转变为由第三方框架创建、注入(DI),他降低了对象之间的耦合度。
Spring容器是采用DI方式实现了IOC控制。IOC是Spring框架的基础和核心。
DI Dependency Injection,依赖注入。
DI的基本原理就是将一起工作的有关系的对象,通过构造方法参数或者参数传入建立连接,因此容器的工作是创建Bean时注入依赖关系。
IOC是一种思想,DI是实现IOC的主要技术途径。
DI有两种方式:setter注入和 构造器注入,能setter先setter,不行再用构造器参数注入
多种类型参数的注入
Spring表达式读取Bean属性,并且进行注入/读取properties文件
xml组件扫描
指定依赖注入关系