SpringBean的实例化
在Spring框架中,想使用Spring容器中的Bean,需要先实例化Bean
SpringBean的实例化有3种方式
构造方法实例化 (最常用)
在Java配置类中,写一个构造方法,在这个构造方法中new一个Bean实例,
然后在构造方法上添加注解@Bean(value="beanClass") ,这里的beanClass是Bean实例的名称,一般使用小驼峰命名。
示例代码
TestBean1.java
package cn.lzh.kam.pojo; import lombok.Getter; import lombok.Setter; @Getter @Setter public class TestBean1 { private String msg; public TestBean1() { this.msg = "测试-构造方法实例化bean"; } public TestBean1(String msg) { this.msg = msg; } }
JavaCfg.java
package cn.lzh.kam.cfg; import cn.lzh.kam.pojo.TestBean1; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class JavaCfg { @Bean(value = "testBean1") public TestBean1 getTestBean1(){ //手动new一个bean实例 return new TestBean1(); } }
然后,业务代码中使用testBean1这个实例,2种方式
第一种,利用context.getBean
public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(KamApplication.class, args); TestBean1 testBean1 = (TestBean1) context.getBean("testBean1"); System.err.println(testBean1.getMsg()); }
第二种,利用注解注入实例
@Service public class LoginService { @Autowired @Qualifier("testBean1") private TestBean1 testBean1; }
静态工厂实例化
新建一个静态工厂类,用于实例化上面的TestBean1.java 。
在这个静态工厂类中,要先通过静态变量方式手动new一个Bean实例,然后用createInstance静态方法renturn出这个实例;
最后,在Java配置类中,写一个构造方法,在这个构造方法中调用刚刚的静态工厂的createInstance方法来返回Bean实例。
示例代码
BeanStaticFactory.java
package cn.lzh.kam.pojo; public class BeanStaticFactory { private static TestBean1 tb2 = new TestBean1("调用静态工厂来实例化Bean"); public static TestBean1 createInstance(){ return tb2; } }
JavaCfg.java
package cn.lzh.kam.cfg; import cn.lzh.kam.pojo.BeanStaticFactory; import cn.lzh.kam.pojo.TestBean1; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class JavaCfg { @Bean(value = "tb2") public TestBean1 getTb2(){ //直接调用静态工厂的静态方法 return BeanStaticFactory.createInstance(); } }
实例工厂实例化
新建一个工厂类,该类中新建一个方法用来手动new出1个Bean实例并返回。
然后,在Java配置类中,写一个构造方法,
在这个构造方法中,要先new一个工厂类的实例,
然后用调用实例工厂的 createTb3Instance 方法来返回Bean实例。
示例代码
BeanInstanceFactory.java
package cn.lzh.kam.pojo; public class BeanInstanceFactory { public TestBean1 createTb3Instance(){ return new TestBean1("调用实例工厂来实例化Bean"); } }
JavaCfg.java
package cn.lzh.kam.cfg; import cn.lzh.kam.pojo.BeanInstanceFactory; import cn.lzh.kam.pojo.BeanStaticFactory; import cn.lzh.kam.pojo.TestBean1; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class JavaCfg { @Bean(value = "tb3") public TestBean1 getTb3(){ //要先实例化 工厂类 BeanInstanceFactory bi = new BeanInstanceFactory(); return bi.createTb3Instance(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构