
@Componentpublic class AnoDemoBean {}
@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Component //可以看到@Service注解上有添加@Componentpublic @interface Service {@AliasFor(annotation = Component.class)String value() default "";}
Controller 一般用在控制层
Service 一般用在业务层
Repository 一般用在数据层
Component 一般用在公共组件上
1.2 @Bean定义方式
@Datapublic class ConfigDemoBean {}@Configurationpublic class BeanLoadConfig {@Beanpublic ConfigDemoBean configDemoBean() {return new ConfigDemoBean();}}
1.3 @Component VS @Bean
@Configurationpublic class WireThirdLibClass {@Beanpublic ThirdLibClass getThirdLibClass() {//第三方的ThirdLibClass类return new ThirdLibClass();}}
@Beanpublic OneService getService(status) {case (status) {when 1:return new serviceImpl1();when 2:return new serviceImpl2();when 3:return new serviceImpl3();}}
public class MacCondition implements Condition {@Overridepublic boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {Environment environment = conditionContext.getEnvironment();String property = environment.getProperty("os.name");if (property.contains("Mac")) {log.info("当前操作系统是:Mac OS X");return true;}return false;}}@Configurationpublic class ConditionalConfig {/*** 如果MacCondition的实现方法返回true,则注入这个bean*/@Bean("mac")@Conditional({MacCondition.class})public SystemBean systemMac() {log.info("ConditionalConfig方法注入 mac实体");return new SystemBean("Mac ios系统","001");}}
总结:@Component和@Bean都是用来注册Bean并装配到Spring容器中,但是Bean比Component的自定义性更强。可以实现一些Component实现不了的自定义加载类。
package com.third.bean;import org.springframework.stereotype.Component;/*** @Description: 这个bean作为第三方bean 给依赖该jar包的项目使用*/@Componentpublic class ThirdComponentBean {private String type = "第三方ThirdComponent注解生成bean实体";}
/*** @Description: Springboot 启动类*/@ComponentScan(basePackages ={"com.third.bean"})@SpringBootApplication()public class Application {public static void main(String[] args) {SpringApplication.run(Application.class);}}
2.2 @Import注解
@Import(value= com.third.bean.ThirdComponentBean.class)@SpringBootApplication()public class Application {public static void main(String[] args) {SpringApplication.run(Application.class);}}
2.3 spring.factories
在资源目录下新建目录 META-INF
在 META-INF 目录下新建文件 spring.factories
在文件中添加下面配置
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.third.bean.ConfigurationBean

2.4 完整项目
文章转载自后端元宇宙,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




