springboot~注册bean的⽅法
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 = Logger(EmailLogServiceImpl.class);
@Override
public void send(String email, String message) {
logger.info("send email:{},message:{}", email, message);
}
}
◆@Bean注解直接注册
注解@Bean被声明在⽅法上,⽅法都需要有⼀个返回类型,⽽这个类型就是注册到IOC容器的类型,接⼝和类都是可以的,介于⾯向接⼝原则,提倡返回类型为接⼝。
下⾯代码在⼀个@Configuration注解的类中,同时注册了多个bean。
@Configuration
public class LogServiceConfig {
/**
* 扩展printLogService⾏为,直接影响到LogService对象,因为LogService依赖于PrintLogService.
*
spring ioc注解* @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之所以如何受欢迎,我想很⼤原因是它⾃动化注册和⾃动化配置这⼀块的设计,确实让开发⼈员感到⾮常的⾃如,⾥也有类似的产品,像近⼏年⽐较流⾏的abp框架,⼤叔⾃⼰也写过类似的lind框架,都是基于⾃动化注册和⾃动化配置的理念。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。