springboot注册bean的三种方法

作者:张占岭 时间:2023-11-22 21:57:12 

spring在启动时会自己把bean(java组件)注册到ioc容器里,实现控制反转,在开发人员使用spring开发应用程序时,你是看不到new关键字的,所有对象都应该从容器里获得,它们的 生命周期 在放入容器时已经确定!

下面说一下三种注册bean的方法

  • @ComponentScan

  • @Bean

  • @Import

@ComponentScan注册指定包里的bean

Spring容器会扫描@ComponentScan配置的包路径,找到标记@Component注解的类加入到Spring容器。

我们经常用到的类似的(注册到IOC容器)注解还有如下几个:

  • @Configuration:配置类

  • @Controller :web控制器

  • @Repository :数据仓库

  • @Service:业务逻辑

下面代码完成了EmailLogServiceImpl这个bean的注册,当然也可以放在@Bean里统一注册,需要看@Bean那一节里的介绍。


@Component
public class EmailLogServiceImpl implements EmailLogService {
private static final Logger logger = LoggerFactory.getLogger(EmailLogServiceImpl.class);

@Override
public void send(String email, String message) {
 Assert.notNull(email, "email must not be null!");
 logger.info("send email:{},message:{}", email, message);
}
}

@Bean注解直接注册

注解@Bean被声明在方法上,方法都需要有一个返回类型,而这个类型就是注册到IOC容器的类型,接口和类都是可以的,介于面向接口原则,提倡返回类型为接口。

下面代码在一个@Configuration注解的类中,同时注册了多个bean。


@Configuration
public class LogServiceConfig {

/**
 * 扩展printLogService行为,直接影响到LogService对象,因为LogService依赖于PrintLogService.
 *
 * @return
 */
@Bean
public PrintLogService printLogService() {
 return new PrintLogServiceImpl();
}

@Bean
public EmailLogService emailLogService() {
 return new EmailLogServiceImpl();
}

@Bean
public PrintLogService consolePrintLogService() {
 return new ConsolePrintLogService();
}
}

@Import注册Bean

这种方法最为直接,直接把指定的类型注册到IOC容器里,成为一个java bean,可以把@Import放在程序的八口,它在程序启动时自动完成注册bean的过程。


@Import({ LogService.class,PrintService.class })
public class RegistryBean {

}

Spring之所以如何受欢迎,我想很大原因是它自动化注册和自动化配置这一块的设计,确实让开发人员感到非常的自如,.net里也有类似的产品,像近几年比较流行的abp框架,大叔自己也写过类似的lind框架,都是基于自动化注册和自动化配置的理念。

来源:http://www.cnblogs.com/lori/p/10418271.html

标签:springboot,注册,bean
0
投稿

猜你喜欢

  • Java设计模式之Builder建造者模式

    2021-12-16 07:21:53
  • java抛出异常的几种情况小结

    2022-01-11 05:46:40
  • Java使用二分法进行查找和排序的示例

    2023-03-16 10:16:37
  • spring boot security设置忽略地址不生效的解决

    2022-06-07 16:37:30
  • 深入解析C#编程中struct所定义的结构

    2022-03-01 12:43:08
  • C#中调用VB中Inputbox类的实现方法

    2023-09-06 18:12:57
  • Java快速批量移动文件的实现方法

    2021-06-15 16:58:56
  • Java构建高效结果缓存方法示例

    2021-11-12 03:52:06
  • java nio基础使用示例

    2022-02-12 01:46:22
  • c#操作xml文件示例

    2023-12-11 06:40:42
  • C#(asp.net)多线程用法示例(可用于同时处理多个任务)

    2022-03-09 01:41:30
  • Android实现QQ图片说说照片选择效果

    2022-05-15 12:52:08
  • ElasticSearch学习之ES Mapping实战示例

    2023-11-25 06:12:25
  • Android系统优化Ninja加快编译

    2022-06-30 19:43:14
  • 浅谈C# 中的委托和事件

    2021-06-06 18:53:07
  • C#中的高效IO库System.IO.Pipelines

    2022-11-16 03:43:06
  • J2SE基础之命令行中编写第一个 Hello World

    2023-10-05 09:43:55
  • Java集合类的组织结构和继承、实现关系详解

    2023-03-09 10:48:50
  • Android UI设计系列之自定义Dialog实现各种风格的对话框效果(7)

    2023-11-18 14:26:37
  • JVM内存管理之JAVA语言的内存管理详解

    2021-11-01 12:00:10
  • asp之家 软件编程 m.aspxhome.com