一、Spring IoC容器
IoC(Inverse of Control)控制反转,将对象的创建以及对象依赖关系反转给Spring容器,程序本身不进行维护。Spring通过IoC容器来管理对象的实例化和初始化,以及对象从创建到销毁的整个生命周期。
Spring提供的2种不同类型的IoC容器,BeanFactory和ApplicationContext容器:
1、BeanFactory容器:由org.springframework.beans.factory.BeanFactory接口定义,采用懒加载,所以容器启动比较快;
2、ApplicationContext容器:继承了BeanFactory接口,增加了AOP、国际化、时间支持等,常用的两个实现类:ClassPathXmlApplicationContext和FileSystemXmlApplicationContext。
二、Spring DI
DI(Dependency Injection)依赖注入,spring容器在创建被调用者的实例时,会自动将调用者需要的对象实例注入给调用者,调用者通过spring容器获得被调用者实例。
依赖注入的两种主要实现方式:
1、构造函数注入
指IoC容器使用构造函数注入被依赖的实例,可以通过调用带参数的构造函数实现依赖注入,每个参数代表一个依赖。
2、setter注入(设值注入)
指IoC容器使用setter方法注入被依赖的实例,通过调用无参构造器或者无参static工厂方法实例化Bean后,调用该Bean的setter方法,即可实现基于setter的DI。
满足要求:
(1)必须提供一个默认的无参构造方法;
(2)必须为需要注入的属性提供对应的setter方法。
三、Spring注解
1、@Component:让Spring容器来管理对象,相当于在xml中配置了一个Bean;
2、@Controller:和@Component作用一样,作用于表现层;
3、@Service:和@Component作用一样,作用于业务层;
4、@Repository:和@Component作用一样,作用于持久层;
5、@Value:给属性注入基本数据,支持SpEL;
6、@Autowired:自动按照类型注入,使用注解注入属性时,set方法可以省略,该注解只能注入bean类型,当有多个相同类型时,将bean的名字作为要注入对象的属性名,也可以;
7、@Qualifier:与 @Autowired 注解配合使用,会将默认的按 Bean 类型装配修改为按 Bean 的实例名称装配,Bean 的实例名称由 @Qualifier 注解的参数指定。
8、@Resource:直接按照bean的id注入,只能注入bean类型;
9、@Scope:指定Bean的作用范围,取值为:singleton、prototype、request、session、golbalsession;
10、@PostConstruct:指定初始化方法;
11、@PreDestroy:指定销毁方法。