springboot加载注入bean的方式,springboot bean加载过程

springboot加载注入bean的方式在SpringBoot的大环境下,基本上很少使用之前的xml配置Bean,主要是因为这种方式不好维护而且也不够方便。 springboto注入bean主要采用下图几种方式

在典型的SpringBoot 环境中,很少使用遗留的XML 配置bean。主要原因是这种方式维护困难,不够方便。

Springboto主要通过以下方式注入bean: Bean分为本地服务工程注解声明的Bean和外部依赖包中的Bean。

一、 springboot装配本地服务工程中的bean

1、注解装配Bean

1. 对组件、服务、控制器、存储库等使用派生注释。

只要在你的类中添加@Component注解,只要扫描到该注解,就会将其注入到Spring bean容器中。

@成分

公共类AnoDemoBean {

}

当然,@Component注解并不是声明bean的唯一方式;您还可以使用常见的注解,例如:@Repository、@Service和@Controller。

如果您查看这些注释,您会发现它们本身是用@Component 注释的。

@Target({ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@记录

@Component //可以看到@Service注解中添加了@Component,类似于@Repository和@Controller。

公共@接口服务{

@AliasFor(

注释=组件.类

字符串值()默认\’\’;

}

这一系列注解的出现给我们带来了很大的便利。您不再需要像以前一样在bean.xml 文件中配置bean;现在只需将相关注释添加到您的类即可完成bean 定义。

实际上,这四种注解的功能并没有什么特别的区别,只是业界有一个不成文的约定。

控制器通常用于控制层服务。通常用于数据层存储库。通常用在公共组件中。

2、@Bean定义方式

该方法主要与Configuration结合使用来定义bean。接下来,以返回bean 对象的方法的形式在Configuration 类中声明bean。通常采用以下姿势:

@数据

公共类ConfigDemoBean {

}

@作品

公共类BeanLoadConfig {

@豆子

公共ConfigDemoBean configDemoBean() {

返回一个新的ConfigDemoBean()。

}

}

需要说明的是,BeanLoadConfig 类本身也被Spring 容器视为一个bean。

3、Component注解 VS Bean注解

1)对象不同:@Component注解作用于类,@Bean注解作用于方法。

@Bean方法更加灵活。例如,如果引用第三方库中的类并需要将其组装到Spring容器中,则只能通过@Bean来实现。

例如

@作品

公共类WireThirdLibClass {

@豆子

公共ThirdLibClass getThirdLibClass() {

//第三方ThirdLibClass类

返回一个新的ThirdLibClass()。

}

}

另一个例子

@豆子

公共OneService getService(状态) {

案例(状态){

当1:

返回新的serviceImpl1();

当2:

返回新的serviceImpl2();

当3:

返回新的serviceImpl3();

}

}

这两点用@Component都无法实现,只能用@Bean来实现,所以@Bean更加灵活。

2)@Component通常通过类路径扫描自动组装到Spring容器中。 @Bean 通常定义在带注释的方法中创建此bean 的逻辑。

可以添加@Conditional、@ConditionalOnBean等注解来控制bean是否被声明,并阻止它从一开始就被自动组装到Spring容器中。

例如

公共类MacCondition 实现Condition {;

@覆盖

公共布尔匹配(ConditionContextconditionContext,AnnotatedTypeMetadata annotatedTypeMetadata){

环境环境=conditionContext.getEnvironment();

字符串属性=environment.getProperty(\’os.name\’);

if (property.contains(\’Mac\’)) {

log.info(\’当前操作系统是:Mac OS X\’);

返回真。

}

返回假。

}

}

@作品

公共类条件配置{

/**

* 如果MacCondition 的实现方法返回true,则注入此bean

*/

@Bean(\’Mac\’)

@Conditional({MacCondition.class})

公共SystemBean systemMac() {

log.info(\’ConditionalConfig方法插入Mac实体\’);

return new SystemBean(\’Mac ios 系统\’,\’001\’);

}

}

上面的例子表明,只有当前操作系统是Mac时,才会注入当前的bean。这只能使用@Bean注解来实现。

总结:@Component 和@Bean 都是用来注册和组装bean 到Spring 容器中的,但是bean 比组件更具可定制性。您可以实现一些组件无法实现的自定义加载类。

二、springboot装配依赖包中的bean

当SpingBoot的主类启动时,@SpringBootApplication注解默认会扫描自己的包路径及其子包路径下所有需要组装的类,并自动将它们放入Spring bean容器中。

但是如果你提供一个Jar包给第三方用户使用,他们能加载那个jar里面的bean吗?

这取决于当前项目的包名与您引用的第三方Jar包的包名是否匹配。如果一致的话,可以直接加载第三方依赖包中的bean。如果不一致,则无法加载第三方依赖包中的bean。

例如,如果您当前的项目包地址是com.jincou,引用的第三方Jar的包也是com.jincou,那么您可以扫描第三方Jar中的bean并将其注入到Spring中。容器。如果您当前的项目包地址是com.jincou,而您引用的第三方Jar的包是com.third,则无法扫描第三方Jar中的bean,因此无法注入到Spring中。容器。

例如,这里我们有一个第三方bean。如何扫描并能够注入到Spring 容器中。

包com.third.bean;

导入org.springframework.stereotype.Component。

/**

* @Description: 该bean在依赖jar包的项目中作为第三方bean使用。

*/

@成分

公共类ThirdComponentBean {

private String type=\’第三方ThirdComponent注解生成bean实体\’;

}

1、ComponentScan注解

@SpringBootApplication注解默认扫描的只是当前项目的包及其子包,所以我们只要想办法能够扫描第三方jar包就可以了。

/**

* @Description: Springboot启动类

*/

@ComponentScan(basePackages={\’com.third.bean\’})

@SpringBootApplication()

公开课申请{

公共静态无效主(字符串[] args){

SpringApplication.run(Application.class);

}

}

@ComponentScan主要定义了一个扫描路径,用于查找需要组装的类,并自动将其组装到Spring Bean容器中。

需要组装的类是带有@Controller、@Service、@Repository、@Component、@Configuration等注解的bean,添加到IOC容器中。

这里不需要将其添加到启动类中,您可以将其添加到已添加到程序集中的类中,但如果要更改它,将其添加到启动类中更直观且更容易找到。或者稍后删除。

2、Import注解

@ComponentScan扫描整个包,但实际上可能只需要注入一个或几个指定的bean。在这种情况下,您可以考虑使用@Import注释。

@Import(值=com.third.bean.ThirdComponentBean.class)

@SpringBootApplication()

公开课申请{

公共静态无效主(字符串[] args){

SpringApplication.run(Application.class);

}

}

这样,ThirdComponentBean 对象也将成功注入到Spring Bean 容器中。

3、spring.factories文件中配置bean

上述两种注入方法都有明显的缺点。这意味着如果需要引用外部jar包中的bean,需要在当前项目中设置@ComponentScan或@Import来扫描注入当前的bean。不够友好。

我当前的项目可以直接引用第三方jar中的bean而不做任何事情吗?

当然。

只需将配置放在第三方jar指定的文件中,用户就会自动加载它,以避免代码入侵。

在resources目录下新建目录META-INF。

在META-INF 目录中创建一个新文件spring.factories。

在文件中添加以下配置

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.third.bean.ConfigurationBean

以上关于如何用#springboot加载和注入bean的相关内容来源网络,仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92064.html

(0)
CSDN's avatarCSDN
上一篇 2024年6月24日 下午6:27
下一篇 2024年6月24日 下午6:27

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注