java spring boot 导入bean 的四种方式
1 Import导入bean的四种方式
2 代码
2.1 要导入的bean
package com.example.demo;
public class MyUser {
}
package com.example.demo;
public class MyRow {
}
2.2 各种方式的代码
2.2.1 @Import(MyUser.class)
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import com.example.demo.MyUser;
import com.example.demo.UserConfig;
import org.springframework.context.annotation.Import;
import java.util.Map;
@SpringBootApplication
@Import(MyUser.class)
//@Import(UserConfig.class)
//@Import(MyImportSelecter.class)
//@Import(MyImportBeanDefinitionRegistrar.class)
public class Demo2Application {
public static void main(String[] args) {
ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(Demo2Application.class, args);
//User user = (User) configurableApplicationContext.getBean("user");
//System.out.println(user);
//MyUser myUser = (MyUser) configurableApplicationContext.getBean("myUser2");
MyUser myUser = (MyUser) configurableApplicationContext.getBean("myUser");
System.out.println(myUser);
//Map<String,MyUser> map = configurableApplicationContext.getBeansOfType(MyUser.class);
//System.out.println(map);
}
}
2.2.2 @Import(UserConfig.class)
package com.example.demo;
import org.springframework.boot.autoconfigure.security.SecurityProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class UserConfig {
@Bean
public MyUser myUser(){
return new MyUser();
}
@Bean
public MyRow myRow(){
return new MyRow();
}
}
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import com.example.demo.MyUser;
import com.example.demo.UserConfig;
import org.springframework.context.annotation.Import;
import java.util.Map;
@SpringBootApplication
//@Import(MyUser.class)
@Import(UserConfig.class)
//@Import(MyImportSelecter.class)
//@Import(MyImportBeanDefinitionRegistrar.class)
public class Demo2Application {
public static void main(String[] args) {
ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(Demo2Application.class, args);
//User user = (User) configurableApplicationContext.getBean("user");
//System.out.println(user);
//MyUser myUser = (MyUser) configurableApplicationContext.getBean("myUser2");
MyUser myUser = (MyUser) configurableApplicationContext.getBean("myUser");
System.out.println(myUser);
//Map<String,MyUser> map = configurableApplicationContext.getBeansOfType(MyUser.class);
//System.out.println(map);
}
}
2.2.3 @Import(MyImportSelecter.class)
package com.example.demo;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;
public class MyImportSelecter implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[]{"com.example.demo.MyUser","com.example.demo.MyRow"};
}
}
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import com.example.demo.MyUser;
import com.example.demo.UserConfig;
import org.springframework.context.annotation.Import;
import java.util.Map;
@SpringBootApplication
//@Import(MyUser.class)
//@Import(UserConfig.class)
@Import(MyImportSelecter.class)
//@Import(MyImportBeanDefinitionRegistrar.class)
public class Demo2Application {
public static void main(String[] args) {
ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(Demo2Application.class, args);
//User user = (User) configurableApplicationContext.getBean("user");
//System.out.println(user);
//MyUser myUser = (MyUser) configurableApplicationContext.getBean("myUser2");
MyUser myUser = (MyUser) configurableApplicationContext.getBean("myUser");
System.out.println(myUser);
//Map<String,MyUser> map = configurableApplicationContext.getBeansOfType(MyUser.class);
//System.out.println(map);
}
}
2.2.4 @Import(MyImportBeanDefinitionRegistrar.class)
package com.example.demo;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(MyUser.class).getBeanDefinition();
registry.registerBeanDefinition("myUser2",beanDefinition);
}
}
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import com.example.demo.MyUser;
import com.example.demo.UserConfig;
import org.springframework.context.annotation.Import;
import java.util.Map;
@SpringBootApplication
//@Import(MyUser.class)
//@Import(UserConfig.class)
//@Import(MyImportSelecter.class)
@Import(MyImportBeanDefinitionRegistrar.class)
public class Demo2Application {
public static void main(String[] args) {
ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(Demo2Application.class, args);
//User user = (User) configurableApplicationContext.getBean("user");
//System.out.println(user);
MyUser myUser = (MyUser) configurableApplicationContext.getBean("myUser2");
//MyUser myUser = (MyUser) configurableApplicationContext.getBean("myUser");
System.out.println(myUser);
Map<String,MyUser> map = configurableApplicationContext.getBeansOfType(MyUser.class);
System.out.println(map);
}
}
3 运行结果 仅以2.2.4的运行结果为例,其他结果都大概相同。
C:UsersThinkPad.jdksopenjdk-21.0.2binjava.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 FilesJetBrainsIntelliJ IDEA 2023.3.2libidea_rt.jar=54699:D:Program FilesJetBrainsIntelliJ IDEA 2023.3.2bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:UsersThinkPadIdeaProjectsuntitled7demo2targetclasses;C:UsersThinkPad.m2repositoryorgspringframeworkbootspring-boot-starter-data-redis3.2.2spring-boot-starter-data-redis-3.2.2.jar;C:UsersThinkPad.m2repositoryorgspringframeworkbootspring-boot-starter3.2.2spring-boot-starter-3.2.2.jar;C:UsersThinkPad.m2repositoryorgspringframeworkbootspring-boot3.2.2spring-boot-3.2.2.jar;C:UsersThinkPad.m2repositoryorgspringframeworkspring-context6.1.3spring-context-6.1.3.jar;C:UsersThinkPad.m2repositoryorgspringframeworkspring-expression6.1.3spring-expression-6.1.3.jar;C:UsersThinkPad.m2repositoryiomicrometermicrometer-observation1.12.2micrometer-observation-1.12.2.jar;C:UsersThinkPad.m2repositoryiomicrometermicrometer-commons1.12.2micrometer-commons-1.12.2.jar;C:UsersThinkPad.m2repositoryorgspringframeworkbootspring-boot-autoconfigure3.2.2spring-boot-autoconfigure-3.2.2.jar;C:UsersThinkPad.m2repositoryorgspringframeworkbootspring-boot-starter-logging3.2.2spring-boot-starter-logging-3.2.2.jar;C:UsersThinkPad.m2repositorychqoslogbacklogback-classic1.4.14logback-classic-1.4.14.jar;C:UsersThinkPad.m2repositorychqoslogbacklogback-core1.4.14logback-core-1.4.14.jar;C:UsersThinkPad.m2repositoryorgapachelogginglog4jlog4j-to-slf4j2.21.1log4j-to-slf4j-2.21.1.jar;C:UsersThinkPad.m2repositoryorgapachelogginglog4jlog4j-api2.21.1log4j-api-2.21.1.jar;C:UsersThinkPad.m2repositoryorgslf4jjul-to-slf4j2.0.11jul-to-slf4j-2.0.11.jar;C:UsersThinkPad.m2repositoryjakartaannotationjakarta.annotation-api2.1.1jakarta.annotation-api-2.1.1.jar;C:UsersThinkPad.m2repositoryorgyamlsnakeyaml2.2snakeyaml-2.2.jar;C:UsersThinkPad.m2repositoryiolettucelettuce-core6.3.1.RELEASElettuce-core-6.3.1.RELEASE.jar;C:UsersThinkPad.m2repositoryionettynetty-common4.1.105.Finalnetty-common-4.1.105.Final.jar;C:UsersThinkPad.m2repositoryionettynetty-handler4.1.105.Finalnetty-handler-4.1.105.Final.jar;C:UsersThinkPad.m2repositoryionettynetty-resolver4.1.105.Finalnetty-resolver-4.1.105.Final.jar;C:UsersThinkPad.m2repositoryionettynetty-buffer4.1.105.Finalnetty-buffer-4.1.105.Final.jar;C:UsersThinkPad.m2repositoryionettynetty-transport-native-unix-common4.1.105.Finalnetty-transport-native-unix-common-4.1.105.Final.jar;C:UsersThinkPad.m2repositoryionettynetty-codec4.1.105.Finalnetty-codec-4.1.105.Final.jar;C:UsersThinkPad.m2repositoryionettynetty-transport4.1.105.Finalnetty-transport-4.1.105.Final.jar;C:UsersThinkPad.m2repositoryioprojectreactorreactor-core3.6.2reactor-core-3.6.2.jar;C:UsersThinkPad.m2repositoryorgreactivestreamsreactive-streams1.0.4reactive-streams-1.0.4.jar;C:UsersThinkPad.m2repositoryorgspringframeworkdataspring-data-redis3.2.2spring-data-redis-3.2.2.jar;C:UsersThinkPad.m2repositoryorgspringframeworkdataspring-data-keyvalue3.2.2spring-data-keyvalue-3.2.2.jar;C:UsersThinkPad.m2repositoryorgspringframeworkdataspring-data-commons3.2.2spring-data-commons-3.2.2.jar;C:UsersThinkPad.m2repositoryorgspringframeworkspring-tx6.1.3spring-tx-6.1.3.jar;C:UsersThinkPad.m2repositoryorgspringframeworkspring-beans6.1.3spring-beans-6.1.3.jar;C:UsersThinkPad.m2repositoryorgspringframeworkspring-oxm6.1.3spring-oxm-6.1.3.jar;C:UsersThinkPad.m2repositoryorgspringframeworkspring-aop6.1.3spring-aop-6.1.3.jar;C:UsersThinkPad.m2repositoryorgspringframeworkspring-context-support6.1.3spring-context-support-6.1.3.jar;C:UsersThinkPad.m2repositoryredisclientsjedis5.2.0-alpha2jedis-5.2.0-alpha2.jar;C:UsersThinkPad.m2repositoryorgslf4jslf4j-api2.0.11slf4j-api-2.0.11.jar;C:UsersThinkPad.m2repositoryorgapachecommonscommons-pool22.12.0commons-pool2-2.12.0.jar;C:UsersThinkPad.m2repositoryorgjsonjson20231013json-20231013.jar;C:UsersThinkPad.m2repositorycomgooglecodegsongson2.10.1gson-2.10.1.jar;C:UsersThinkPadIdeaProjectsuntitled7demo1targetclasses;C:UsersThinkPad.m2repositoryorgspringframeworkspring-core6.1.3spring-core-6.1.3.jar;C:UsersThinkPad.m2repositoryorgspringframeworkspring-jcl6.1.3spring-jcl-6.1.3.jar com.example.demo.Demo2Application
. ____ _ __ _ _
/\ / ___'_ __ _ _(_)_ __ __ _
( ( )___ | '_ | '_| | '_ / _` |
\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |___, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.2.2)
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:UsersThinkPadIdeaProjectsuntitled7demo2targetclasses started by ThinkPad in C:UsersThinkPadIdeaProjectsuntitled7)
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"
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
2024-01-30T22:17:31.909+08:00 INFO 6600 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
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.
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)
com.example.demo.MyUser@27df95e
{myUser=com.example.demo.MyUser@b46e103, myUser2=com.example.demo.MyUser@27df95e}
Process finished with exit code 0
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
二维码