1.新建项目atguigu-hello-spring-boot-starter,在pox.xml中导入自动配置atguigu-hello-spring-boot-starter-autoconfigure项目
<dependencies> <dependency> <groupId>com.atguigu</groupId> <artifactId>atguigu-hello-spring-boot-starter-autoconfigure</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies>
2.新建项目atguigu-hello-spring-boot-starter-autoconfigure 场景的自动配置
2.1.编写JavaBean
@ConfigurationProperties("atguigu.hello") public class HelloProperties { private String prefix; private String suffix; public String getPrefix() { return prefix; } public void setPrefix(String prefix) { this.prefix = prefix; } public String getSuffix() { return suffix; } public void setSuffix(String suffix) { this.suffix = suffix; } }
2.2编写service
/** * 默认不要放在容器中 */ public class HelloService { @Autowired HelloProperties helloProperties; public String sayHello(String userName){ return helloProperties.getPrefix() + ":"+userName+"》"+helloProperties.getSuffix(); } }
2.3编写自动配置
@Configuration @EnableConfigurationProperties(HelloProperties.class) //默认HelloProperties放在容器中 public class HelloServiceAutoConfiguration{ @ConditionalOnMissingBean(HelloService.class) @Bean public HelloService helloService(){ HelloService helloService = new HelloService(); return helloService; } }
2.4在resource下创建META-INF目录 然后创建spring.factories文件
# Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.atguigu.hello.auto.HelloServiceAutoConfiguration//配置类路径
3.在自己的项目中使用
自定义start中 properties类没有直接加入到容器中,方法类也没有直接加入到容器中,
1.如果properties类直接加入容器中的话,那么方法类上就得加上组件注解,方法类上不加组件注解 无法使用自动注入功能 注解就报错
2.方法类上不加组件注解是因为在配置类里要条件判断,要判断自定义的方法还是场景默认的方法,如果直接加上组件注解 这样的话随着场景的启动就会加入到容器中,在自定义方法的时候 容器中就会存在两个
3.当在使用场景默认方法时,我们直接进行自动注入,就会进入到场景的配置类中,new出方法对象的,将@EnableConfigurationProperties中的配置属性类加入容器,并绑定配置属性类上的@configurationproperties(xxx.properties)
4.配置属性类与配置文件是绑定关系,通过配置文件就可以改变配置属性类中的属性,方法中就能使用,
标签:容器,String,自定义,public,start,atguigu,hello From: https://www.cnblogs.com/dzs894330350/p/16748200.html