博主是跟着视频来学习的Spring框架,用这篇文章来记录一下所学习的知识点,以便以后回顾,也是梳理一下知识。
1. 启动Spring容器 获取对象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
context.getBean("BeanID");
2. Spring创建对象有三种方式分别为调用构造器创建Bean、静态工厂模式、实例工厂模式。
具体的可以参考这篇博客:Spring使用静态工厂方法创建Bean
3. Bean的别名
<bean id="helloWorld" class="classpath"/>
<alias name="helloWorld" alias="newName">
4. 创建对象的时间
默认情况下,启动Spring容器的时候创建对象
懒加载:添加属性 lazy-init=“true” 则在context.getBean时才创建
<bean id="helloWorld" class="classpath" lazy-init="true"/>
5. Spring容器中对象的多实例和单实例
在Spring容器中的对象默认是单例,如果在类上声明一个属性,该属性含有数据,那么该属性是全局的
如果bean标签中scope属性是prototype则是多例
- singleton 表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例(默认)
- prototype表示每次获得bean都会生成一个新的对象
- request表示在一次http请求内有效(只适用于web应用)
- session表示在一个用户会话内有效(只适用于web应用)
- globalSession表示在全局会话内有效(只适用于web应用
详细介绍可以参考这篇文章: Spring中的scope配置和@scope注解
6.Sprig容器的init和destory和执行流程
- 创建一个Spring容器对象
- 调用构造函数创建在Spring容器中的对象(不能是多实例,lazy-init不能为true)
- 执行一个对象的init方法(需要在bean标签中设置init-method方法)
- 利用context.getBean得到对象(如果这个bean的scopr为prototype或者init-lazy为true则创建对象)
- 调用对象的业务流程
- 当spring关闭时执行destroy方法(需要在bean标签中设置destroy方法)
7.Spring容器的DI(依赖注入)
-
Set方法注入
-
构造方法注入(注意循环依赖问题)
- constructor-arg指的是构造器中的参数
- index 角标 从0开始
- value 如果是一般类型用value赋值
- ref 引用类型赋值
-
自动装配
3.1 基于xml的自动装配- 按照类型装配
- 按照名字装配
3.2 基于注解的自动装配(@Autowired、@Resource、@Value)
- @Autowired:默认按照类型匹配,如果想要按名称匹配可以和@Qualifier结合
- @Resource:默认按名字来匹配后自动注入
- @Value:适用于简单类型的装配。
详细介绍可以参考这篇文章:关于Spring IOC (DI-依赖注入)你需要知道的一切)
8.Spring容器的继承
- 在类中继承后赋值
- 通过parent从配置文件中继承
9.Java的自定义注解
参考链接:Spring自定义注解