Spring依赖注入详解

Spring框架是以 简化Java EE应用程序的开发 为目标而创建的。Spring可以实现很多功能,但是这些功能的底层都依赖于它的两个核心特性,也就是依赖注入和面向切面编程。几乎Spring所做的任何事情都可以追溯到下述的一条或多条策略:

基于POJO的轻量级和最小侵入性编程
通过依赖注入和面向接口实现松耦合;
基于切面和惯例进行声明式编程;
通过切面和模板减少样板式代码。 

Spring的三个基本愿景:

使用DI来实现低耦合
使用AOP切面实现高内聚
使用模板消除样板式代码,比如jdbcTemplate

二、Bean

容器是Spring框架的核心。Spring容器使用DI管理构成应用的组件(Bean),它会创建相互协作的组件之间的关联。毫无疑问,这些对象更简单干净,更易于理解和重用,更易于单元测试。

Spring为每个Bean定义了多种作用域,默认都是以单例的模式创建的:

单例(Singleton):在整个应用中,只创建bean的一个实例。
原型(Prototype):每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例。
会话(Session):在Web应用中,为每个会话创建一个bean实例。
请求(Rquest):在Web应用中,为每个请求创建一个bean实例。

Bean的生命周期:

Spring依赖注入详解

Spring自带了多种类型的上下文(适用于在普通类中利用Spring的上下文加载需要的Bean):

AnnotationConfigApplicationContext:从一个或者多个的Java配置类中加载Spring的应用上下文

Spring依赖注入详解

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(JavaConfig.class);

View Code

AnnotationConfigWebApplicationContext:从一个或多个基于Java的配置类中加载Spring Web应用上下文。
ClassPathXmlApplicationContext:从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源。

Spring依赖注入详解

ApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext.xml");

View Code

FileSystemXmlapplicationcontext:从文件系统下的一个或多个XML配置文件中加载上下文定义。
XmlWebApplicationContext:从Web应用下的一个或多个XML配置文件中加载上下文定义。

三、依赖注入

1、@Component 表明该类会作为组件类,并告知Spring 要为这个类创建bean(这个bean的ID默认取名类名的首字母小写)。不过组件扫描默认是不启用的。我们还需要显示配置一下Spring,从而命令他去寻找带有@Component(类似的还有@Repository @service @controller)注解的类,并为他创建bean。有三种方式来配置Spring创建Bena:

* 自动化装配的方式:1、建一个配置类。@Configuration 表明这个类是一个配置类 加上@ComponentScan(basePackages={"包名1","包名2"} 或者 basePackageClasses={包1的某个Class,包2的某个Class}) 会扫描和配置类相同的包,以及这个包下的所有子包。

2、Spring XML配置方式: <context:component-scan base-package=""/>

在JavaConfig中进行显示配置(适用于第三方的类库组件装配到自己应用中) 

Spring依赖注入详解

@Configuration public class JavaConfig { @Bean(name = "base64Util") public Base64Util getBase64Util(){ return new Base64Util(); } @Bean(name = "base64UtilExpand") //这种显示配置默认的Bean名是方法名。所以最好显示配置一下 public Base64UtilExpand getBase64UtilExpand(){ //对于这种创建的bean需要引用其他的bean。Spring是这样处理的:当引用到还没创建的bean的时候,Spring会拦截下这个引用,等到引用的bean的创建完成。已保证Spring bean的单例模式. return new Base64UtilExpand(getBase64Util()); } @Bean(name = "base64UtilExpand") public Base64UtilExpand getBase64UtilExpand(Base64Util base64Util){ return new Base64UtilExpand(base64Util); } }

View Code

在XML中进行显示配置,最古老的方式,一般很少用,有两种方式注入,构造器注入和set注入:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/7be1c88647299645c0362ad1275ccebb.html