Spring框架是个粘合剂类型的框架,它管理着项目中所有的对象
core container 核心容器 它是spring框架的基石 任意一个spring项目运行的时候都会生成一个容器,把项目运行时需要的对象全部管理起来。
Spring核心有两个概念:IOC:控制反转也叫DI,依赖注入。
控制反转:就是以前的对象都是由程序员管理创建的,现在由Spring框架的容器来管理所有的对象
依赖注入:Spring框架的容器会自动完成依赖注入
Spring框架中管理的对象叫做bean
Spring核心容器有三种创建bean的方式
构造方法创建bean
<bean id="student" class="com.youzhong.entity.Student"/>
静态工厂创建bean
<!-- factory-method配置工厂里面的静态方法 -->
<bean id="computer" class="com.youzhong.factory.ComputerFactory" factory-method="createComputer"/>
实例工厂创建bean
<!-- 1、创建工厂bean -->
<bean id="factory" class="com.youzhong.factory.ComputerFactory"/>
<!-- 2、创建computer -->
<!-- factory-bean引用工厂对象 -->
<bean id="computer" factory-bean="factory" factory-method="createComputer"/>
pring核心容器可以给属性注入,有3种方式
构造方法注入
<!-- class属性用来配置类的全限定名,id是bean的唯一标识 -->
<bean id="student" class="com.youzhong.entity.Student"/>
set方法注入
<bean id="student" class="com.youzhong.entity.Student">
<!-- property标签使用set方法注入,name需要和set方法名匹配 -->
<property name="dd" value="1"/>
<property name="name" value="豆腐坊"/>
<property name="sex" value="男"/>
</bean>
注解注入
<!-- 注解开关:扫描@Autowired等注解 -->
<context:annotation-config/>
<bean id="player" class="com.youzhong.entity.Player"/>
<bean id="team" class="com.youzhong.entity.Team"/>
容器中bean的作用域
singleton:单例模式,在整个Spring IoC容器中,singleton作用域的Bean将只生成一个实例。
单例:保证只有一个实例。
单例有两种方式,一种是饿汉使单例,一种是懒汉式单例
饿汉式单例,创建实例比较早,类一加载就立即创建了实例,不会等到调方法获取。
还有一种懒汉式单例,创建实例比较晚,类加载时不会创建实例,当调方法获取时才会创建。
饿汉式单例是线程安全的,懒汉式单例是线程不安全的。
使用synchronize同步锁可以保证线程安全
使用双重锁(双重判定锁)可以只锁几行代码,提升性能。