在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(){
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();
}
}

实例工厂实例化

SpringBean的实例化的更多相关文章

  1. Spring---bean的实例化

    Spring IoC容器如何实例化Bean呢?传统应用程序可以通过new和反射方式进行实例化Bean.而Spring IoC 容器则需要根据Bean定义里的配置元数据使用反射机制来创建Bean.在Sp ...

  2. 【转】Java方向如何准备BAT技术面试答案(汇总版)

    原文地址:http://www.jianshu.com/p/1f1d3193d9e3 这个主题的内容之前分三个篇幅分享过,导致网络上传播的比较分散,所以本篇做了一个汇总,同时对部分内容及答案做了修改, ...

  3. 【转】Java方向如何准备技术面试答案(汇总版)

    本文转载自:“Java团长”公众号 1.面向对象和面向过程的区别 面向过程优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机.嵌入式开发.Linux/Unix等一般采 ...

  4. Java方向如何准备技术面试答案(汇总版)

    本文转载自:"Java团长"公众号 1.面向对象和面向过程的区别 面向过程优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机.嵌入式开发.Linu ...

  5. Java方向如何准备BAT技术面试答案(汇总版)

    这个主题的内容之前分三个篇幅分享过,导致网络上传播的比较分散,所以本篇做了一个汇总,同时对部分内容及答案做了修改,欢迎朋友们吐槽.转发.因为篇幅长度和时间的原因,部分答案我没有亲自总结.更多精彩内容请 ...

  6. 【转载】Java方向如何准备BAT技术面试答案(汇总版)

    作者:微信公众号JavaQ链接:https://www.nowcoder.com/discuss/31667?type=0&order=0&pos=11&page=1来源:牛客 ...

  7. java技术面试之面试题大全

    转载自:http://blog.csdn.net/lijizhi19950123/article/details/77679489 Java 面试知识点总结 本篇文章会对面试中常遇到的Java技术点进 ...

  8. JAVA研发面试题

    转自:http://www.jianshu.com/p/1f1d3193d9e3 Java基础的知识点推荐<Java编程思想>,JVM的推荐<深入理解Java虚拟机>,Spri ...

  9. spring-bean实例化三种方式

    在spring中,bean的示例化有三种方式. 1.使用类的无参构造函数创建 2.使用静态工厂方式创建 3.使用实例化工厂方式创建. 具体代码如下 静态工厂方式: Bean2.java package ...

随机推荐

  1. 编程式导航路由跳转到当前路由(参数不变), 多次执行会抛出NavigationDuplicated的警告错误?

    注意:编程式导航(push|replace)才会有这种情况的异常,声明式导航是没有这种问题,因为声明式导航内部已经解决这种问题. 这种异常,对于程序没有任何影响的. 为什么会出现这种现象: 由于vue ...

  2. junit 5 - Display Name 展示名称

    本文地址:https://www.cnblogs.com/hchengmx/p/14883563.html @DisplayName可以给 测试类 或者 测试方法来自定义显示的名称.可以支持 空格.特 ...

  3. HtmlParse:一款超轻量级的HTML文件解析和爬取工具

    HtmlParse 是一款基于windwos平台的HTML文档解析工具,可快速构建DOM树,从而轻松实现网页元素的爬取工作.DOM树就是一个HTML文档的节点树,每个节点由:标签(Tag).属性(At ...

  4. 数字图像处理-基于matlab-直方图均匀化,傅立叶变换,图像平滑,图像锐化

    直方图均匀化 任务:用MATLAB或VC或Delphi等实现图像直方图均匀化的算法. clc;clear;close all; % 清除工作台 % path(path,'..\pics'); % 设置 ...

  5. 你不会用node 操作mysql数据库吗?

    http://static.runoob.com/download/websites.sql这是实例 websites.sql文件1.安装node的mysql服务 npm install mysql ...

  6. javascript写无缝平移的轮播图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. React技巧之打开文件输入框

    原文链接:https://bobbyhadz.com/blog/react-open-file-input-on-button-click 作者:Borislav Hadzhiev 正文从这开始~ 总 ...

  8. Python自动化办公:批量将文件按分类保存,文件再多,只需一秒钟解决

    序言 (https://jq.qq.com/?_wv=1027&k=GmeRhIX0) 当我们电脑里面的文本或者或者文件夹太多了,有时候想找到自己想要的文件,只能通过去搜索文件名,要是名字忘记 ...

  9. C++ 练气期之二维数组与矩阵运算

    1. 前言 C++中的一维数组可以存储线性结构的数据,二维数组可以存储平面结构的数据.如班上所有学生的各科目成绩就有二个维度,学生姓名维度和科目成绩维度. 这样的表格数据可以使用二维数组进行存储. 当 ...

  10. nodejs - http.request是否有超时

    默认没有.那么,req.setTimeout(msec, callback)是干什么用的. 它的意思是 socket msec 没有活动后执行callback,不帮你关闭连接. 就像一个秒表,每收到数 ...