2019-07-02 14:43:43 1882瀏覽
今天千鋒扣丁學(xué)堂Java培訓(xùn)老師給大家分享一篇關(guān)于Spring創(chuàng)建Bean的6種方式詳解,首先在Spring應(yīng)用中創(chuàng)建Bean的多種方式,包括自動(dòng)創(chuàng)建,以及手動(dòng)創(chuàng)建注入方式,實(shí)際開(kāi)發(fā)中可以根據(jù)業(yè)務(wù)場(chǎng)景選擇合適的方案,下面我們一起來(lái)看一下吧。
<bean id="xxxx" class="xxxx.xxxx"/>
@Component public class User{ }
@ComponentScan(value={"com.microblog.blog","com.microblog.common"}) public class MicroblogBlogApplication { public static void main(String args[]){ SpringApplication.run(MicroblogBlogApplication.class,args); } }
@Configuration public class UserConfiguration{ @Bean @ConditionalOnBean(Location.class) public User user(){ return new User(); } }
Springboot還為我們提供了更多類似的注解。
SpringBoot在啟動(dòng)的時(shí)候?qū)?huì)掃描該文件,從何獲取到配置類UserConfiguration。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.log.config.UserConfiguration
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
@Import(User.class) public class MicroblogUserWebApplication { public static void main(String args[]) { SpringApplication.run(MicroblogUserWebApplication.class, args); } }
@Slf4j public class House { public void run(){ log.info("House run ...."); } } @Slf4j public class User { public void run(){ log.info("User run ...."); } } @Slf4j public class Student { public void run(){ log.info("Student run ...."); } }
@Slf4j public class MyImportSelector implements ImportSelector { @Override public String[] selectImports(AnnotationMetadata annotationMetadata) { log.info("MyImportSelector selectImports ..."); return new String[]{ User.class.getName()}; } }
@Slf4j public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) { log.info("MyImportBeanDefinitionRegistrar registerBeanDefinitions ....."); BeanDefinition beanDefinition = new RootBeanDefinition(House.class.getName()); beanDefinitionRegistry.registerBeanDefinition(House.class.getName(),beanDefinition); } }
@Configuration public class ImportAutoconfiguration { @Bean public Student student(){ return new Student(); } }
@Retention(RetentionPolicy.RUNTIME) @Documented @Target(ElementType.TYPE) @Import({MyImportSelector.class,ImportAutoconfiguration.class,MyImportBeanDefinitionRegistrar.class}) public @interface EnableImportSelector { String value(); }
@EnableImportSelector(value = "xxx") @SpringBootApplication public class ImportDemoApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(ImportDemoApplication.class, args); User user = context.getBean(User.class); user.run(); Student student = context.getBean(Student.class); student.run(); House house = context.getBean(House.class); house.run(); } }
2019-06-20 17:53:39.528 INFO 27255 --- [ main] com.springboot.importselector.pojo.User : User run .... 2019-06-20 17:53:39.530 INFO 27255 --- [ main] c.s.importselector.pojo.Student : Student run .... 2019-06-20 17:53:39.531 INFO 27255 --- [ main] c.springboot.importselector.pojo.House : House run ....
@Component public class LocationRegister implements BeanFactoryAware { @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { DefaultListableBeanFactory listableBeanFactory = (DefaultListableBeanFactory)beanFactory; Location location = new Location(); listableBeanFactory.registerSingleton("location1",location); } }
DefaultListableBeanFactory是ConfigurableListableBeanFactory的實(shí)現(xiàn)類。是對(duì)BeanFactory功能的擴(kuò)展。
Location location = context.getBean(Location.class); location.run();
【關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料】 【掃碼進(jìn)入JavaEE/微服務(wù)VIP免費(fèi)公開(kāi)課】
查看更多關(guān)于“Java開(kāi)發(fā)資訊”的相關(guān)文章>>