Spring学习(一)

面向接口编程

用接口进行声明,将接口的实现类赋值给对象的声明,然后进行调用。

1
2
OneInterface oif = new OneInterfaceImpl();
System.out.println(oif.hello("kitty"));

Spring IOC容器

IOC

IOC:控制反转,控制权的转移。应用程序本身不负责依赖对象的创建和维护,而是由外部容器进行创建和维护。

DI:依赖注入,是IOC的一种实现方式。所谓的依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

目的:创建对象,并组装对象之间的依赖关系。

spring container

spring对Bean的配置的两种方式

  • 在xml中配置
  • 注解

spring注入

spring注入是指在启动spring容器加载bean配置的时候,完成对变量的赋值操作

  • 设置注入(自动的调用属性的set方法)
  • 构造注入(调用构造方法时赋值)

Bean

Bean配置项

  • Id:Bean的唯一标识
  • class:具体要实例化的是哪个类
  • Scope:范围、作用域
  • Constructor arguments:构造器的参数
  • properties:属性
  • Autowiring mode:自动装配模式
  • lazy-initialization mode:懒加载模式
  • Initialzation / destruction method:初始化和销毁的方法

Bean的作用域

  • singleton:指一个bean容器中只存在一份。
1
2
3
4
5
BeanScope beanScope1 = (BeanScope) context.getBean("beanScope");
beanScope1.say();
BeanScope beanScope2 = (BeanScope) context.getBean("beanScope");
beanScope2.say();

输出:

1
2
BeanScope say:485041780
BeanScope say:485041780
  • prototype:每次new的时候都会创建一个新的实例,destory方式不生效
1
2
3
4
5
BeanScope beanScope = (BeanScope) context.getBean("beanScope");
beanScope.say();
beanScope = (BeanScope) context.getBean("beanScope");
beanScope.say()

输出:

1
2
BeanScope say:485041780
BeanScope say:1459672753
  • request:每次http请求创建一个实例且仅在当前request内有效。

  • session:同上,每次http请求创建,当前session内有效

Bean的生命周期

  • 定义
  • 初始化
  • 使用
  • 销毁

初始化和销毁bean的方法

初始化:

1、实现InitializingBean接口覆盖afterPropertiesSet方法

2、配置init-method

销毁:

1、实现DisposableBean接口覆盖destroy方法

2、配置destroy-method

配置全局的默认初始化销毁方法:

在xml中

Aware

Spring中提供了一些以Aware为结尾的接口,实现了Aware接口的bean在被初始化后,可以获取相应资源。

通过Aware接口,可以对spring相应的资源进行操作,但是要慎重。

为对spring进行简单的扩展提供了方便的入口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.test;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class MoocAware implements ApplicationContextAware,BeanNameAware{
private String beanName;
@Override
public void setBeanName(String name) {
this.beanName = name;
System.out.println("BeanNameAware:"+name);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
System.out.println("ApplicationContextAware:"+applicationContext.getBean(this.beanName));
}
}
您的支持将鼓励我继续创作~