一、核心概念
1、bean标签
<bean></bean>:定义spring核心容器管理对象
1.1、Id:可通过bean的属性ID来获取对应的bean,唯一标识
1.2、Class:bean的类型,包名+类名(给谁造对象)
1.3、Name:ben的别名,和属性具有相同的功能但name属性可写多个,用分号、逗号、空格分开
2、bean作用范围
Scope:控制bean造出来的对象是不是同一个对象即单例和非单例
2.1、Singleton单例(默认)
2.2、Prototype非单例
3、Bean的实例化
3.1、构造方法实例化bean:Spring创建bean对象时调用的是无参构造函数
3.2、静态工厂实例化bean:通过新建工厂包的方式在返回值new对象
3.3、实例工厂实例化bean:不是静态的工厂创建bean
①、基础性操作和静态工厂相同,实例工厂非静态
②、配置文件先造工厂对象再造对象(无class)
③、主类中也需先new工厂对象
4、Bean的生命周期
4.1、生命周期:从创建到消亡的完整过程
4.2、Bean生命周期:bean(对象)从创建到销毁的整体过程
4.3、Bean生命周期控制:在bean创建后到销毁前做的一些事情
4.4、控制bean生命周期的两种方式
①、提供生命周期函数(函数+配置)
②、通过实现接口的方式(InitializingBean和DisposableBean)
5、Bean生命周期过程
5.1、初始化容器
①、创建对象,内存分配
②、执行构造方法
③、执行属性注入(setter操作)
④、执行bean初始化操作
5.2、使用bean
①、执行业务操作
5.3、关闭/销毁容器
①、执行bean销毁方法
二、静态工厂方式创建bean
1、新建一个普通java包、类体以及接口,方便后期调用
源码:
package staticFactory; public interface StaticFactory { public void save(); }
package staticFactory.Impl; import staticFactory.StaticFactory; public class StaticFactoryImpl implements StaticFactory { public void save() { System.out.println("通过静态工厂创建对象"); } }
2、新建工厂包及类体
源码:
package factory2; import staticFactory.Impl.StaticFactoryImpl; import staticFactory.StaticFactory; public class StaticFactory2 { public static StaticFactory getStaticFactory() { System.out.println("这里是静态工厂"); return new StaticFactoryImpl(); } }
3、 给静态工厂配置文件,在resource文件下新建spring Config,命名为:staticContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="staticBean" class="factory2.StaticFactory2" factory-method="getStaticFactory"></bean> </beans>
id:给bean起的名字,
class:给bean配置啥类型,一般就是给谁造对象。这里指造一个工厂对象
factory-bean:工厂内的那个方法造对象
4、到这里基本上静态工厂创建bean已经完成了,接下来就是来测试一下,在test包下新建一个测试类
源码:
import factory2.StaticFactory2; import staticFactory.StaticFactory; public class staticFactoryTest { public static void main(String[] args) { // StaticFactory:就是需要被调用的那个接口名 // StaticFactory2:就是工厂类名 StaticFactory staticFactory = StaticFactory2.getStaticFactory(); staticFactory.save(); } }
三、实例工厂创建bean
1、其实实例工厂和静态工厂差不多,只不过静态工厂的服务是静态的,提供的方法是static的,而实例工厂提供的方法服务是非static的,实例工厂相对比较灵活
第一步还是先创建一个被调用的包、类和方法及接口
源码:
package instanceFactory; public interface InstanceFactory { public void save(); }
package instanceFactory.Impl; import instanceFactory.InstanceFactory; public class InstanceFactoryImpl implements InstanceFactory { public void save() { System.out.println("实例工厂创建bean--"); } }
2、创建一个工厂包、工厂类
源码:
package factory3; import instanceFactory.Impl.InstanceFactoryImpl; import instanceFactory.InstanceFactory; public class Factory03 { public InstanceFactory getInstanceFactory() { System.out.println("这里是实例工厂--"); return new InstanceFactoryImpl(); /* * 这里解释一下: * InstanceFactory:是个接口 * InstanceFactoryImpl:接口的实现,返回一个对象 * */ } }
3、给实例工厂配置文件,在resource下新建spring Config,命名为:instanceContext.xml
源码:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="instanceBean" class="factory3.Factory03"></bean> <!-- factory-bean:工厂实例,就是上面一个bean的id, factory-method:这个工厂的方法 --> <bean id="instanceBean1" factory-bean="instanceBean" factory-method="getInstanceFactory"></bean> </beans>
id:给bean起的名字
class:给bean配置对象的类型
factory-bean:工厂实例,就是创建工厂bean的id
factory-method:这个工厂的方法
4、到这里,实例工厂创建bean基本上就完成了,接下来就是在test中测试了。在test包下新建一个InstanceFactoryTest
源码:
import factory3.Factory03; import instanceFactory.InstanceFactory; public class InstanceFactoryTest { public static void main(String[] args) { // 实例工厂 Factory03 factory03 = new Factory03(); InstanceFactory instanceFactory = factory03.getInstanceFactory(); instanceFactory.save(); } }