博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring里面的 @Import @Configuration和@Bean的用法和理解以及区别
阅读量:5865 次
发布时间:2019-06-19

本文共 2462 字,大约阅读时间需要 8 分钟。

hot3.png

 

1.

  • @Import注解在4.2之前只支持导入配置类
  • 在4.2,@Import注解支持导入普通的java类,并将其声明成一个bean

演示java类

public class DemoService {    public void doSomething(){        System.out.println("everything is all fine");    }}

演示配置

import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Import;@Configuration@Import(DemoService.class)//在spring 4.2之前是不不支持的public class DemoConfig {}

运行

import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Main {    public static void main(String[] args) {        AnnotationConfigApplicationContext context =                new AnnotationConfigApplicationContext("com.wisely.spring4_2.imp");        DemoService ds = context.getBean(DemoService.class);        ds.doSomething();    }}

输出结果

everything is all fine

 

2. :

①注解@Bean的属性initMethod, destroyMethod 

②接口InitializingBean, DisposableBean

③注解@PostConstruct,@PreDestroy

都作用于同样的两个过程——初始化阶段和销毁阶段

1.1 定义

从定义可以看出,@Bean只能用于注解方法和注解的定义。

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME)

1.2 spring文档中对 @Bean的说明

The @Bean annotation is used to indicate that a method instantiates, configures and initializes a new object to be managed by the Spring IoC container.

For those familiar with Spring’s <beans/> XML configuration the @Bean annotation plays the same role as the <bean/>element. 

用@Bean注解的方法:会实例化、配置并初始化一个新的对象,这个对象会由spring IoC 容器管理。

实例:

@Configurationpublic class AppConfig {    @Bean    public MyService myService() {        return new MyServiceImpl();    }}

相当于在 XML 文件中配置

1.3 生成对象的名字:默认情况下用@Bean注解的方法名作为对象的名字。但是可以用 name属性定义对象的名字,而且还可以使用name为对象起多个名字。

@Configurationpublic class AppConfig {    @Bean(name = "myFoo")    public Foo foo() {        return new Foo();    }}

 

@Configurationpublic class AppConfig {    @Bean(name = { "dataSource", "subsystemA-dataSource", "subsystemB-dataSource" })    public DataSource dataSource() {        // instantiate, configure and return DataSource bean...    }}

3.区别和联系

@Bean 一般和 @Component或者@Configuration 一起使用。

@Component和@Configuration不同之处

(1)This method of declaring inter-bean dependencies only works when the @Bean method is declared within a@Configuration class. You cannot declare inter-bean dependencies using plain @Component classes.

 

在 @Component 注解的类中不能定义 类内依赖的@Bean注解的方法。@Configuration可以。

@Configuration可理解为用spring的时候xml里面的<beans>标签

@Bean可理解为用spring的时候xml里面的<bean>标签

转载于:https://my.oschina.net/u/1266221/blog/799378

你可能感兴趣的文章
Java工具类——UUIDUtils
查看>>
使用Node搭建reactSSR服务端渲染架构
查看>>
文件缓存
查看>>
作业五 :团队项目准备素材搜集
查看>>
转 博弈类题目小结(hdu,poj,zoj)
查看>>
Java NIO学习笔记八 Pipe
查看>>
远程协助
查看>>
Scrum实施日记 - 一切从零开始
查看>>
关于存储过程实例
查看>>
配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法...
查看>>
AIX 7.1 install python
查看>>
PHP盛宴——经常使用函数集锦
查看>>
重写 Ext.form.field 扩展功能
查看>>
Linux下的搜索查找命令的详解(locate)
查看>>
福利丨所有AI安全的讲座里,这可能是最实用的一场
查看>>
开发完第一版前端性能监控系统后的总结(无代码)
查看>>
Python多版本情况下四种快速进入交互式命令行的操作技巧
查看>>
MySQL查询优化
查看>>
【Redis源码分析】如何在Redis中查找大key
查看>>
northropgrumman
查看>>