spring标准的配置文件:
- 根标签是beans
- beans后面的是约束文件声明
- beans里面是bean声明
- 什么是bean:bean就是java对象,spring容器管理的java对象,叫做bean。
spring创建对象,调用类的哪个方法?
默认调用的是类的无参构造方法。
spring在何时创建对象?
创建spring容器对象的时候,会读取配置文件, 创建文件中声明的java对象。
优点:
获取对象的速度快,因为对象已经创建好了。
缺点:
占用内存。
spring容器创建对象,一次创建几个?
在创建容器对象时,会把配置文件中的所有对象都创建出来(spring的默认规则)。
spring容器创建对象的特点
- 容器对象ApplicationContext:接口
通过ApplicationContext对象,获取要使用的其他java对象,执行getBean(“的id”) - spring默认是调用类的无参数构造方法,创建对象。
- spring读取配置文件, 一次创建好所有的java对象,都放到map中。
IOC控制反转
IOC概念
IOC,inversion of Control:控制反转,是一个理论,一个指导思想。指导开发人员如何使用对象的。
把对象的创建,属性赋值,对象的生命周期都交给代码之外的**容器**管理。
- ioc分为控制和反转
控制:对象创建,属性赋值,对象生命周期管理。
反转:把开发人员管理对象的权限转移给了代码之外的容器实现。由容器完成对象的创建。
正转:开发人员在代码中,使用new构造方法创建对象。开发人员掌握了对象的创建,属性赋值,对象从开始到销毁的全部过程。开发人员有对对象全部控制。
通过容器,可以使用容器中的对象(容器已经创建了对象,对象属性赋值了,对象也组装好了)。
Spring就是一个容器,可以创建对象,管理对象,给对象属性赋值。
- IOC的技术实现
DI(依赖注入):Dependency Injection,缩写DI,是IOC的一种技术实现。程序只需要提供要使用的对象的名称叫可以了,对象如何创建,如何从容器中查找,获取都是由容器内部自己实现。
DI:给属性赋值。
spring调用类的无参数构造方法,创建对象。对象创建后给属性赋值。
给属性赋值的方式:
- XML配置文件中的标签和属性;
- 使用注解。
DI分类: - set注入,也叫做设值注入;
- 构造注入。
基于XML的DI
在xml配置文件中使用标签和属性,完成对象创建,属性赋值。
-
set注入,也叫做设值注入。
概念:spring调用类中的set方法,在set方法中可以完成属性赋值。推荐使用。
与属性名无关,看的是set方法。 -
构造注入,使用name属性
-
构造注入,使用index
-
构造注入,省略index
-
引用类型的自动注入
概念:spring可以根据某些规则给引用类型完成赋值。只对引用类型有效。(byName byType) -
byName(按名称注入):java类中引用类型属性名称和spring容器中bean的id名称一样的,且数据类型也是一样的,这些bean能够赋值给引用类型。
-
byType(按类型注入):java类中引用类型的数据类型和spring容器中的bean的class值是同源关系的,这样的bean赋值给引用类型。⚠️在xml配置文件中,符合条件的对象,只能有一个,多余一个会报错。
基于注解的DI
- 创建对象的注解
@Component
@Controller
@Service
@Repository - 简单类型属性赋值
@value - 引用类型属性赋值
@Autowired:Spring提供的注解,支持byName,byType
@Autowired:默认就是byType
@Autowired+@Qualifier:使用byName
@Resource:来自jdk中(只在jdk8中存在,高于jdk8的版本需要加依赖引入)的注解给引用类型赋值,默认是byName。
@Resource:先使用byName,再使用byType
@Resource(name=“bean的名称”):只使用byName注入
IOC总结
IOC:管理对象的,把对象放在容器中,创建 赋值 管理依赖关系。
IOC:通过管理对象,实现解耦合。 ioc解决处理业务逻辑对象之间的耦合关系,也就是service和dao之间的耦合。
spring作为容器适合管理哪些对象?
1.service对象,dao对象
2.工具类对象
不适合交给spring管理的对象:
1.实体类
2.servlet,listener,filter等web中的对象,他们是tomcat创建和管理的。