在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(); |
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/293492.html