基于Java配置选项,可以编写大多数的Spring不用配置XML,但有几个基于Java的注释的帮助下解释。从Spring3.0开始支持使用java代码来代替XML来配置Spring,基于Java配置Spring依靠Spring的JavaConfig项目提供的很多优点。通过使用@Configuration, @Bean ,@Importand,@DependsOnannotations来实现Java的配置Spring.
@Configuration & @Bean 注解:
在Spring的新的Java-Configuration的中间产物是基于类的@Configuration的注解和基于方法的@Bean注解。
@Bean注解是用来指明方法的实例化,配置和初始化一个对象是通过Spring的IoC容器来管理的。对于那些熟悉使用以XML配置Spring的<beans /> 标签,@Bean注解和<bean />标签是起相同作用的。你能和Spring的@Component注解的组件一起使用@Bean注解方法, 然而,这些@Bean注解的方法通常是和@Configuration的Bean。
@Configuration注解的类指明该类主要是作为一个bean的来源定义。此外,@Configurationd定义的classes允许在同一个类中使用@Bean定义的方法来定义依赖的bean
注释类与@Configuration表示这个类可以使用Spring IoC容器为bean定义的来源。在@Bean 注解告诉Spring的注解为@Bean的一个方法将返回应注册为在Spring应用程序上下文中的bean对象。最简单可行的@Configuration类将如下所示:
上面的代码将等同于下面的XML配置:
下面注解为@Bean的方法名称作为工作bean的id,它创建并返回实际的bean。配置类可以有声明多个@Bean。一旦配置类定义,可以加载和提供他们使用AnnotationConfigApplicationContext 如下,以Spring容器:
也可以这样写:
其它不变。运行结果:
说明默认返回的是singleton类型,这里改成了prototpye
这么做有什么好处呢?
1.使用纯java代码,不在需要xml
2.在配置中也可享受OO带来的好处
3.类型安全对重构也能提供良好的支持
4.依旧能享受到所有springIoC容器提供的功能
ApplicationContext 接口的最常用的实现类是 ClassPathXmlApplicationContext 和 FileSystemXmlApplicationContext,以及面向 Portlet 的 XmlPortletApplicationContext 和面向 web 的 XmlWebApplicationContext,它们都是面向 XML 的。Spring 3.0 新增了另外两个实现类:AnnotationConfigApplicationContext 和 AnnotationConfigWebApplicationContext。从名字便可以看出,它们是为注解而生,直接依赖于注解作为容器配置信息来 源的 IoC 容器初始化类。由于 AnnotationConfigWebApplicationContext 是 AnnotationConfigApplicationContext 的 web 版本,其用法与后者相比几乎没有什么差别,因此本文将以 AnnotationConfigApplicationContext 为例进行讲解。
AnnotationConfigApplicationContext 搭配上 @Configuration 和 @Bean 注解,自此,XML 配置方式不再是 Spring IoC 容器的唯一配置方式。两者在一定范围内存在着竞争的关系,但是它们在大多数情况下还是相互协作的关系,两者的结合使得 Spring IoC 容器的配置更简单,更强大。之前,我们将配置信息集中写在 XML 中,如今使用注解,配置信息的载体由 XML 文件转移到了 Java 类中。我们通常将用于存放配置信息的类的类名以 “Config” 结尾,比如 AppDaoConfig.java、AppServiceConfig.java 等等。我们需要在用于指定配置信息的类上加上 @Configuration 注解,以明确指出该类是 Bean 配置的信息源。
注意:Spring 对标注 Configuration 的类有如下要求
配置类不能是 final 的;配置类不能是本地化的,亦即不能将配置类定义在其他类的方法内部;配置类必须有一个无参构造函数。AnnotationConfigApplicationContext 将配置类中标注了 @Bean 的方法的返回值识别为 Spring Bean,并注册到容器中,受 IoC 容器管理。@Bean 的作用等价于 XML 配置中的 标签。
@Bean 具有以下四个属性:
name -- 指定一个或者多个 Bean 的名字。这等价于 XML 配置中 的 name 属性。
initMethod -- 容器在初始化完 Bean 之后,会调用该属性指定的方法。这等价于 XML 配置中 的 init-method 属性。
destroyMethod -- 该属性与 initMethod 功能相似,在容器销毁 Bean 之前,会调用该属性指定的方法。这等价于 XML 配置中 的 destroy-method 属性。
autowire -- 指定 Bean 属性的自动装配策略,取值是 Autowire 类型的三个静态属性。Autowire.BY_NAME,Autowire.BY_TYPE,Autowire.NO。与 XML 配置中的 autowire 属性的取值相比,这里少了 constructor,这是因为 constructor 在这里已经没有意义了。@Bean 没有直接提供指定作用域的属性,可以通过 @Scope 来实现该功能。
由于@configureation注解类本身已经标注了@component注解,所以任何标注了@configuration的类,本身也相当于标注了@component,即它们可以像普通的bean一样被注入到其它bean中去。
如下面:
使用:
输出结果:
exployee3员工姓名:红色革命 员工编号 :2342
使用基于java类的配置信息启动Spring容器:
其中注释的代码和不注释的代码可以看成是相同的,运行后结果不
@Import 注解:
@ import的注解允许加载@Bean从另一个配置类定义。考虑一个配置类,如下所示:
您可以在另一个bean声明导入上述bean声明如下
现在,不需要实例化的前提下,当同时指定配置A.class和配置B.class,只有Config B类需要如下提供:
生命周期回调:
@Bean注解支持指定任意的初始化和销毁回调方法,就像Spring的XML的初始化方法和bean元素销毁方法的属性:
指定Bean的适用范围:
默认范围是单例,但可以使用@Scope注解来覆盖此如下:
三种配置bean方式的对比总结
相关推荐
使用spring-mvc 注解方式 注入 Controller 控制器 访问路径 精确到方法名 无需 多余注解 简单方便 附带实例
这些新特性包括:注解驱动的依赖性注入(annotation-driven dependency injection),使用注解而非XML元数据来自动侦测classpath上的Spring组件,注解对生命周期方法的支持,一个新的web控制器模型将请求映射到加...
Java-Spring各种依赖注入注解的区别.doc
java注解原始代码弹簧框架1 在这个项目中,我使用注释和Java代码配置创建了Spring项目。 运行应用程序 步骤1.安装Tomcat服务器并将其与IDE连接 第2步。添加lib文件夹中的Jar文件- Right click on Main project -> ...
@Autowired:Spring提供的注解 @Inject:JSR-330提供的注解 @Resource:JSR-250提供的注解 Java配置 @Configuration声明当前类是一个配置类 @Bean注解在方法上,声明当前方法的返回值为一个...
Spring依赖注入——java项目中使用spring注解方式进行注入.rar
-- ②:启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation. AnnotationMethodHandlerAdapter"/> <!-- ③:对模型视图名称的解析,即在模型...
使用 Valid 注解做参数校验,并统一处理校验不通过的异常 使用 lombok 简化开发 使用 Swagger 自动化 API 文档 REST 接口统一返回 ResultBean 通过构造器注入 单元测试 启动方式 下载源码: git clone ...
SpringBoot采用 JavaConfig的方式对Spring进行配置,并且提供了大量的注解,极大的提高了工作效率,比如@Configuration和@bean注解结合,基于@Configuration完成类扫描,基于@bean注解把返回值注入IOC容器。...
春天Zeebe 该项目允许在您的Spring或Spring Boot环境中轻松利用Zeebe。...现在,您可以注入ZeebeClient并对其进行处理,例如创建新的工作流实例: @Autowired private ZeebeClient client; 部署工作流程模型 使用@Zee
6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...
使用@Autowired(required = false)时,即便找不到Bean也不会报错该注解通常和@Autowired一起使用,可以当作ByName注入B
简述java注解功能及用法,有代码示例。看起来还成,比较简单,学spring注入的时候要用到注解注入的话,本书属于必看版。
综合运用Java反射、泛型和注解实现的类似Spring的核心注入
retrofit-sample 演示 通过retrofit-starter搭建的环境调用 User服务的添删改查以及上传,以及retrofit-starter的诸多特性,例如: 自定义注入OkHttpClient 注解式拦截器 连接池管理 日志打印 请求重试 错误解码器 ...
本文是我在业余时间学习spring注解注入之后的整理总结,希望能给对spring注入技术感兴趣和正在学习spring注入的同学们一些帮助。文中的内容都是我自己的摸索总结,当中难免会有偏差和错误,希望spring达人能够及时...
本文是我在业余时间学习spring注解注入之后的整理总结,希望能给对spring注入技术感兴趣和正在学习spring注入的同学们一些帮助。文中的内容都是我自己的摸索总结,当中难免会有偏差和错误,希望spring达人能够及时...
SpringBoot采用 JavaConfig的方式对Spring进行配置,并且提供了大量的注解,极大的提高了工作效率,比如@Configuration和@bean注解结合,基于@Configuration完成类扫描,基于@bean注解把返回值注入IOC容器。...
这个项目是关于Spring依赖注入的。 我们正在创建一个Maven项目。 我们在pom.xml文件中包含spring-context.jar。 然后我们创建并设计beans.xml文件。 我们运行最新的项目 2-弹簧框架依赖项注入示例 这个项目是关于...
主要介绍了详解Java Spring各种依赖注入注解的区别的相关资料,需要的朋友可以参考下