5

SpringBean的实例化 - silent_fall

 2 years ago
source link: https://www.cnblogs.com/skyI/p/16609918.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在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@Setterpublic 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; @Configurationpublic 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()); }

第二种,利用注解注入实例

@Servicepublic 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; @Configurationpublic 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; @Configurationpublic class JavaCfg { @Bean(value = "tb3") public TestBean1 getTb3(){ //要先实例化 工厂类 BeanInstanceFactory bi = new BeanInstanceFactory(); return bi.createTb3Instance(); } }

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK