spring 创建Bean最全实现方法
创建bean方式,spring创建bean的方式包含:声明式样注入方式和编程式注入方式。分别为:
声明式样注入包含: 1)xml 配置化方式 2)@bean注解注入方式3)@Component方式
编程式注入包含: 4)接口注入方式 5)import 导入方式。
废话不多说,上代码,
第一种:xml
1、xml 文件
1 2 3 4 5 6 7 8 9 | <?xml version= "1.0" encoding= "UTF-8" ?> <beans xmlns= "http://www.springframework.org/schema/beans" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" > <bean id= "hello" class = "org.springframework.northeasttycoon.beans.Hello" > <property name= "displayName" value= "this is display!" /> </bean> </beans> |
2、hello实体类
/** * @author :java.zhao * @date :2018-09-29 10:33 */ public class Hello { public String getDisplayName() { return displayName; } public void setDisplayName(String displayName) { this.displayName = displayName; } private String displayName; public void sayHello() { System.out.println("dispalyname values is:"+this.displayName); } }
3、启动类
/** * @author :java.zhao * @description:xml 方式 * @date :2018-09-29 10:10 */ public class TestHelloService { public static void main(String[] args) { // 加载spring容器 ApplicationContext ac1 = new ClassPathXmlApplicationContext("classpath:beanfactory.xml"); Hello hello = (Hello)ac1.getBean("hello"); hello.sayHello(); } }
第二种:@bean注解注入方式
1、配置类
/** * @author :java.zhao * @date :2018-10-09 11:10 */ public class AppConfig02 { // 第三种 定义bean @Bean public Fox fox(){ return new Fox(); } }
2、fox 实体类
/** * @author :java.zhao * @date :2018-10-04 4:43 */ public class Fox { public Fox() { System.out.println("new Fox()"); } }
3、测试类
/** * @author :java.zhao * @date :2018-10-09 11:09 */ public class ioc02 { @Test public void test01(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig02.class); System.out.println("create fox bean:"+ac.getBean("fox")); } }
第三种:@Component 注解方式
1、Fox03类
/** * @author :java.zhao * @date :2018-10-04 4:43 */ @Component public class Fox03 { public Fox03() { System.out.println("new Fox()"); } }
2、配置类
/** * @author :java.zhao * @date :2018-10-09 11:10 */ @ComponentScan("org.springframework.beandefinition01.bean") public class AppConfig03 { }
3、测试类
/** * @author :tycoon * @date :2018-10-09 11:15 */ public class ioc03 { @Test public void test01(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig03.class); System.out.println("create fox bean:"+ac.getBean("fox03")); } }
第四种:接口注入方式
1、Fox04 实体类
/** * @author :java.zhao * @date :2018-10-04 4:43 */ public class Fox04 { public Fox04() { System.out.println("new Fox04()"); } }
2、测试类
/** * @author :java.zhao * @date :2018-10-09 11:15 */ public class ioc04 { @Test public void test01(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(); ac.refresh(); DefaultListableBeanFactory beanFactory = ac.getDefaultListableBeanFactory(); AbstractBeanDefinition beanDefinition1 = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition(); beanDefinition1.setBeanClass(Fox04.class); beanFactory.registerBeanDefinition("fox04", beanDefinition1); System.out.println("create fox04 bean:"+ac.getBean("fox04")); } }
第五种: 实现 ImportBeanDefinitionRegistrar 接口
1、实现 ImportBeanDefinitionRegistrar 接口类。既:Fox05ImportBeanDefinitionRegistrar
/** * @author :java.zhao * @date :2018-10-04 6:06 */ public class Fox05ImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { BeanDefinition beanDefinition = new RootBeanDefinition(Fox05.class); registry.registerBeanDefinition("fox05",beanDefinition); } }
2、fox05实体类
/** * @author :java.zhao * @date :2018-10-04 6:07 */ public class Fox05 { public Fox05() { System.out.println("Fox05 create!"); } }
3、配置类
/** * @author :tycoon * @description:TODO * @date :2021-10-04 4:30 */ @Import(Fox05ImportBeanDefinitionRegistrar.class) public class AppConfig05 { }
4、测试类
/** * @author :java.zhao * @date :2018-10-09 11:15 */ public class ioc05 { @Test public void test01(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig05.class); System.out.println("create fox05 bean:"+ac.getBean("fox05")); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!