2019-07-02 14:43:43 976浏览
今天千锋扣丁学堂Java培训老师给大家分享一篇关于Spring创建Bean的6种方式详解,首先在Spring应用中创建Bean的多种方式,包括自动创建,以及手动创建注入方式,实际开发中可以根据业务场景选择合适的方案,下面我们一起来看一下吧。
<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在启动的时候将会扫描该文件,从何获取到配置类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的实现类。是对BeanFactory功能的扩展。
Location location = context.getBean(Location.class); location.run();
【关注微信公众号获取更多学习资料】 【扫码进入JavaEE/微服务VIP免费公开课】