当前位置:   article > 正文

java spring boot 导入bean 的四种方式

java spring boot 导入bean 的四种方式

1 Import导入bean的四种方式

2 代码

2.1 要导入的bean

  1. package com.example.demo;
  2. public class MyUser {
  3. }
  1. package com.example.demo;
  2. public class MyRow {
  3. }

2.2 各种方式的代码

2.2.1 @Import(MyUser.class)

  1. package com.example.demo;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.context.ConfigurableApplicationContext;
  5. import com.example.demo.MyUser;
  6. import com.example.demo.UserConfig;
  7. import org.springframework.context.annotation.Import;
  8. import java.util.Map;
  9. @SpringBootApplication
  10. @Import(MyUser.class)
  11. //@Import(UserConfig.class)
  12. //@Import(MyImportSelecter.class)
  13. //@Import(MyImportBeanDefinitionRegistrar.class)
  14. public class Demo2Application {
  15. public static void main(String[] args) {
  16. ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(Demo2Application.class, args);
  17. //User user = (User) configurableApplicationContext.getBean("user");
  18. //System.out.println(user);
  19. //MyUser myUser = (MyUser) configurableApplicationContext.getBean("myUser2");
  20. MyUser myUser = (MyUser) configurableApplicationContext.getBean("myUser");
  21. System.out.println(myUser);
  22. //Map<String,MyUser> map = configurableApplicationContext.getBeansOfType(MyUser.class);
  23. //System.out.println(map);
  24. }
  25. }

2.2.2 @Import(UserConfig.class)

  1. package com.example.demo;
  2. import org.springframework.boot.autoconfigure.security.SecurityProperties;
  3. import org.springframework.context.annotation.Bean;
  4. import org.springframework.context.annotation.Configuration;
  5. @Configuration
  6. public class UserConfig {
  7. @Bean
  8. public MyUser myUser(){
  9. return new MyUser();
  10. }
  11. @Bean
  12. public MyRow myRow(){
  13. return new MyRow();
  14. }
  15. }
  1. package com.example.demo;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.context.ConfigurableApplicationContext;
  5. import com.example.demo.MyUser;
  6. import com.example.demo.UserConfig;
  7. import org.springframework.context.annotation.Import;
  8. import java.util.Map;
  9. @SpringBootApplication
  10. //@Import(MyUser.class)
  11. @Import(UserConfig.class)
  12. //@Import(MyImportSelecter.class)
  13. //@Import(MyImportBeanDefinitionRegistrar.class)
  14. public class Demo2Application {
  15. public static void main(String[] args) {
  16. ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(Demo2Application.class, args);
  17. //User user = (User) configurableApplicationContext.getBean("user");
  18. //System.out.println(user);
  19. //MyUser myUser = (MyUser) configurableApplicationContext.getBean("myUser2");
  20. MyUser myUser = (MyUser) configurableApplicationContext.getBean("myUser");
  21. System.out.println(myUser);
  22. //Map<String,MyUser> map = configurableApplicationContext.getBeansOfType(MyUser.class);
  23. //System.out.println(map);
  24. }
  25. }

2.2.3 @Import(MyImportSelecter.class)

  1. package com.example.demo;
  2. import org.springframework.context.annotation.ImportSelector;
  3. import org.springframework.core.type.AnnotationMetadata;
  4. public class MyImportSelecter implements ImportSelector {
  5. @Override
  6. public String[] selectImports(AnnotationMetadata importingClassMetadata) {
  7. return new String[]{"com.example.demo.MyUser","com.example.demo.MyRow"};
  8. }
  9. }
  1. package com.example.demo;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.context.ConfigurableApplicationContext;
  5. import com.example.demo.MyUser;
  6. import com.example.demo.UserConfig;
  7. import org.springframework.context.annotation.Import;
  8. import java.util.Map;
  9. @SpringBootApplication
  10. //@Import(MyUser.class)
  11. //@Import(UserConfig.class)
  12. @Import(MyImportSelecter.class)
  13. //@Import(MyImportBeanDefinitionRegistrar.class)
  14. public class Demo2Application {
  15. public static void main(String[] args) {
  16. ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(Demo2Application.class, args);
  17. //User user = (User) configurableApplicationContext.getBean("user");
  18. //System.out.println(user);
  19. //MyUser myUser = (MyUser) configurableApplicationContext.getBean("myUser2");
  20. MyUser myUser = (MyUser) configurableApplicationContext.getBean("myUser");
  21. System.out.println(myUser);
  22. //Map<String,MyUser> map = configurableApplicationContext.getBeansOfType(MyUser.class);
  23. //System.out.println(map);
  24. }
  25. }

2.2.4 @Import(MyImportBeanDefinitionRegistrar.class)

  1. package com.example.demo;
  2. import org.springframework.beans.factory.support.AbstractBeanDefinition;
  3. import org.springframework.beans.factory.support.BeanDefinitionBuilder;
  4. import org.springframework.beans.factory.support.BeanDefinitionRegistry;
  5. import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
  6. import org.springframework.core.type.AnnotationMetadata;
  7. public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
  8. public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
  9. AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(MyUser.class).getBeanDefinition();
  10. registry.registerBeanDefinition("myUser2",beanDefinition);
  11. }
  12. }
  1. package com.example.demo;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.context.ConfigurableApplicationContext;
  5. import com.example.demo.MyUser;
  6. import com.example.demo.UserConfig;
  7. import org.springframework.context.annotation.Import;
  8. import java.util.Map;
  9. @SpringBootApplication
  10. //@Import(MyUser.class)
  11. //@Import(UserConfig.class)
  12. //@Import(MyImportSelecter.class)
  13. @Import(MyImportBeanDefinitionRegistrar.class)
  14. public class Demo2Application {
  15. public static void main(String[] args) {
  16. ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(Demo2Application.class, args);
  17. //User user = (User) configurableApplicationContext.getBean("user");
  18. //System.out.println(user);
  19. MyUser myUser = (MyUser) configurableApplicationContext.getBean("myUser2");
  20. //MyUser myUser = (MyUser) configurableApplicationContext.getBean("myUser");
  21. System.out.println(myUser);
  22. Map<String,MyUser> map = configurableApplicationContext.getBeansOfType(MyUser.class);
  23. System.out.println(map);
  24. }
  25. }

3 运行结果 仅以2.2.4的运行结果为例,其他结果都大概相同。

  1. C:\Users\ThinkPad\.jdks\openjdk-21.0.2\bin\java.exe -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints.jmx.exposure.include=*" "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2023.3.2\lib\idea_rt.jar=54699:D:\Program Files\JetBrains\IntelliJ IDEA 2023.3.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\Users\ThinkPad\IdeaProjects\untitled7\demo2\target\classes;C:\Users\ThinkPad\.m2\repository\org\springframework\boot\spring-boot-starter-data-redis\3.2.2\spring-boot-starter-data-redis-3.2.2.jar;C:\Users\ThinkPad\.m2\repository\org\springframework\boot\spring-boot-starter\3.2.2\spring-boot-starter-3.2.2.jar;C:\Users\ThinkPad\.m2\repository\org\springframework\boot\spring-boot\3.2.2\spring-boot-3.2.2.jar;C:\Users\ThinkPad\.m2\repository\org\springframework\spring-context\6.1.3\spring-context-6.1.3.jar;C:\Users\ThinkPad\.m2\repository\org\springframework\spring-expression\6.1.3\spring-expression-6.1.3.jar;C:\Users\ThinkPad\.m2\repository\io\micrometer\micrometer-observation\1.12.2\micrometer-observation-1.12.2.jar;C:\Users\ThinkPad\.m2\repository\io\micrometer\micrometer-commons\1.12.2\micrometer-commons-1.12.2.jar;C:\Users\ThinkPad\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\3.2.2\spring-boot-autoconfigure-3.2.2.jar;C:\Users\ThinkPad\.m2\repository\org\springframework\boot\spring-boot-starter-logging\3.2.2\spring-boot-starter-logging-3.2.2.jar;C:\Users\ThinkPad\.m2\repository\ch\qos\logback\logback-classic\1.4.14\logback-classic-1.4.14.jar;C:\Users\ThinkPad\.m2\repository\ch\qos\logback\logback-core\1.4.14\logback-core-1.4.14.jar;C:\Users\ThinkPad\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.21.1\log4j-to-slf4j-2.21.1.jar;C:\Users\ThinkPad\.m2\repository\org\apache\logging\log4j\log4j-api\2.21.1\log4j-api-2.21.1.jar;C:\Users\ThinkPad\.m2\repository\org\slf4j\jul-to-slf4j\2.0.11\jul-to-slf4j-2.0.11.jar;C:\Users\ThinkPad\.m2\repository\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;C:\Users\ThinkPad\.m2\repository\org\yaml\snakeyaml\2.2\snakeyaml-2.2.jar;C:\Users\ThinkPad\.m2\repository\io\lettuce\lettuce-core\6.3.1.RELEASE\lettuce-core-6.3.1.RELEASE.jar;C:\Users\ThinkPad\.m2\repository\io\netty\netty-common\4.1.105.Final\netty-common-4.1.105.Final.jar;C:\Users\ThinkPad\.m2\repository\io\netty\netty-handler\4.1.105.Final\netty-handler-4.1.105.Final.jar;C:\Users\ThinkPad\.m2\repository\io\netty\netty-resolver\4.1.105.Final\netty-resolver-4.1.105.Final.jar;C:\Users\ThinkPad\.m2\repository\io\netty\netty-buffer\4.1.105.Final\netty-buffer-4.1.105.Final.jar;C:\Users\ThinkPad\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.105.Final\netty-transport-native-unix-common-4.1.105.Final.jar;C:\Users\ThinkPad\.m2\repository\io\netty\netty-codec\4.1.105.Final\netty-codec-4.1.105.Final.jar;C:\Users\ThinkPad\.m2\repository\io\netty\netty-transport\4.1.105.Final\netty-transport-4.1.105.Final.jar;C:\Users\ThinkPad\.m2\repository\io\projectreactor\reactor-core\3.6.2\reactor-core-3.6.2.jar;C:\Users\ThinkPad\.m2\repository\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;C:\Users\ThinkPad\.m2\repository\org\springframework\data\spring-data-redis\3.2.2\spring-data-redis-3.2.2.jar;C:\Users\ThinkPad\.m2\repository\org\springframework\data\spring-data-keyvalue\3.2.2\spring-data-keyvalue-3.2.2.jar;C:\Users\ThinkPad\.m2\repository\org\springframework\data\spring-data-commons\3.2.2\spring-data-commons-3.2.2.jar;C:\Users\ThinkPad\.m2\repository\org\springframework\spring-tx\6.1.3\spring-tx-6.1.3.jar;C:\Users\ThinkPad\.m2\repository\org\springframework\spring-beans\6.1.3\spring-beans-6.1.3.jar;C:\Users\ThinkPad\.m2\repository\org\springframework\spring-oxm\6.1.3\spring-oxm-6.1.3.jar;C:\Users\ThinkPad\.m2\repository\org\springframework\spring-aop\6.1.3\spring-aop-6.1.3.jar;C:\Users\ThinkPad\.m2\repository\org\springframework\spring-context-support\6.1.3\spring-context-support-6.1.3.jar;C:\Users\ThinkPad\.m2\repository\redis\clients\jedis\5.2.0-alpha2\jedis-5.2.0-alpha2.jar;C:\Users\ThinkPad\.m2\repository\org\slf4j\slf4j-api\2.0.11\slf4j-api-2.0.11.jar;C:\Users\ThinkPad\.m2\repository\org\apache\commons\commons-pool2\2.12.0\commons-pool2-2.12.0.jar;C:\Users\ThinkPad\.m2\repository\org\json\json\20231013\json-20231013.jar;C:\Users\ThinkPad\.m2\repository\com\google\code\gson\gson\2.10.1\gson-2.10.1.jar;C:\Users\ThinkPad\IdeaProjects\untitled7\demo1\target\classes;C:\Users\ThinkPad\.m2\repository\org\springframework\spring-core\6.1.3\spring-core-6.1.3.jar;C:\Users\ThinkPad\.m2\repository\org\springframework\spring-jcl\6.1.3\spring-jcl-6.1.3.jar com.example.demo.Demo2Application
  2. . ____ _ __ _ _
  3. /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
  4. ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
  5. \\/ ___)| |_)| | | | | || (_| | ) ) ) )
  6. ' |____| .__|_| |_|_| |_\__, | / / / /
  7. =========|_|==============|___/=/_/_/_/
  8. :: Spring Boot :: (v3.2.2)
  9. 2024-01-30T22:17:31.449+08:00 INFO 6600 --- [ main] com.example.demo.Demo2Application : Starting Demo2Application using Java 21.0.2 with PID 6600 (C:\Users\ThinkPad\IdeaProjects\untitled7\demo2\target\classes started by ThinkPad in C:\Users\ThinkPad\IdeaProjects\untitled7)
  10. 2024-01-30T22:17:31.452+08:00 INFO 6600 --- [ main] com.example.demo.Demo2Application : No active profile set, falling back to 1 default profile: "default"
  11. 2024-01-30T22:17:31.906+08:00 INFO 6600 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
  12. 2024-01-30T22:17:31.909+08:00 INFO 6600 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
  13. 2024-01-30T22:17:31.932+08:00 INFO 6600 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 10 ms. Found 0 Redis repository interfaces.
  14. 2024-01-30T22:17:32.585+08:00 INFO 6600 --- [ main] com.example.demo.Demo2Application : Started Demo2Application in 1.575 seconds (process running for 2.359)
  15. com.example.demo.MyUser@27df95e
  16. {myUser=com.example.demo.MyUser@b46e103, myUser2=com.example.demo.MyUser@27df95e}
  17. Process finished with exit code 0

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/50078?site
推荐阅读
相关标签
  

闽ICP备14008679号