文档章节

Spring创建bean的几种方法

雷速
 雷速
发布于 2017/05/31 16:19
字数 1007
阅读 29
收藏 0
点赞 0
评论 0

前言

本文总结spring创建bean的几种方法,在我所学习的范围内尽量求全,如果以后再发现新的方法方式还会进一步补充

创建bean的方式大致有三种:xml配置,JavaConfig配置,@Component自动化配置

本文的实例在另一篇文章中:《Spring创建bean实例》,可做参考。


XML配置

  xml文件配置是最常见的bean创建方法,我们先从最简单开始。

构造器

<bean id="bean的id" class="包名+类名">
	<constructor-arg value="参数值"/>    
	<!--或者 <constructor-arg ref="other_bean_id"/>  -->
</bean>

   <constructor-arg> 中 value是直接赋值,ref引用其他bean的id作为参数

   其中可以有属性 type="int"指定参数的类型,或者index="0"指定第几个参数

相当于java代码:实例bean = new 类的构造方法(参数值); 创建了bean,然后放入spring容器中

构造器 +property 实例

property配置(set方法)

  调用bean的默认构造方法(无参方法),然后调用set方法将参数设置进去

<bean id="bean的id" class="包名+类名">
	<property name="某个参数名" value="参数值"/>
	<!--或者 <property ref="other_bean_id" -->
</bean>

  <property> 中 value是直接赋值,ref引用其他bean的id作为参数

相当于java代码: 实例bean =new 类构造方法(); bean.setXXX(参数值); 然后将bean放入spring容器中

静态工厂方法

  调用bean的构造函数某个静态方法

<bean id="bean的id" class="包名+类名" factory-method="某个静态方法名">
        <constructor-arg value="参数值"></constructor-arg>           
</bean>

   静态方法的入参,需要用<constructor-arg>

相当于java代码:实例bean = 类.静态方法(参数值); 然后将bean放入spring容器中

实例方法

  调用某个实例方法来生成bean

<bean id="beanA" class="A包+实例类"/>
<bean id="beanB" factory-bean="beanA" factory-method="某个方法" /> 

相当于java代码:实例beanA = new 类A构造方法(); 实例beanB = beanA.某个实例方法(参数值); 然后将beanB放入spring容器中

FactoryBean 方法

如果某个class实现了FactoryBean<T>接口,重写了T getObject()方法,那么这个bean在新建时,在spring容器生成的bean是getObject()方法的返回值,而不是它的构造方法创造的本身的bean。

public class BeanB implements FactoryBean<BeanC> {
    @Override
    public BeanC getObject() {
                return new BeanC();
            }
}
//bean最后为BeanC的实例,而不是beanB
<bean id="beanC" class="BeanB">
</bean>

注意:

  1. 如果想要获得BeanB的实例,需要在id前加&,例如 beanB = applicationContext.getBean("&beanC");
  2. 如果使用@Autowired自动注入实现了FactoryBean接口的类时,可能会出现类型转换错误或者null的问题,因为@Autowired是使用byType注入的,spring可能不能直接获取getObject()的返回类型去注入。因此最好用**@Resource(name="beanC")**,指定beanId来注入

JavaConfig配置

  JavaConfig是与xml并行,相辅相成的一种配置bean模式。使用注解**@Configration** 加在类名前来激活此class为JavaConfig配置

@Bean注解创建

@Configuration  
public class ConfClass{  
  
    @Bean  
    public BeanA beanA(){  
        return new BeanA();  
    }  
}

  @Bean加在某个方法前,方法的返回值即是bean,放入spring容器的bean_id是方法名

  1. 如果使用web服务,则需要修改web.xml中contextConfigLocation的设置,从xml变为java文件 <param-name>contextConfigLocation</param-name>
    <param-value>com.test.ConfClass</param-value>
  2. 如果使用xml配置,使用JAVAConfig配合创建bean,则可以在xml中开启<context:component-scan>注解扫描,加载此config类,或者import,具体方法请搜索相关文档

##@Component自动化配置

  使用 @Component @Controller @Service这些注解,配合spring注解扫描,实现自动注入bean

@Component
public class BeanA {
        public String method() {
                    return "";
                }
}

注解法需要在spring.xml文件下开启注解扫描,配置:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd 
    ">
    <!-- 配置扫描的包,会扫描路径下所有包中的含有注解的类(如@Component @Controller, @Service等) -->
    <context:component-scan base-package="org.test.*" />
</beans>

© 著作权归作者所有

共有 人打赏支持
雷速
粉丝 0
博文 15
码字总数 12115
作品 0
深圳
程序员
Spring实战读书笔记(1)

Spring的根本使命是? 简化Java开发 为了降低Java开发的复杂性,Spring采取了哪4种关键策略? 1、基于POJO的轻量级和最小侵入性编程 2、通过依赖注入和面向接口实现松耦合 3、基于切面和惯例...

祥林会跟你远走高飞
2014/12/30
0
0
Spring温故而知新 - bean的装配

按条件装配bean 就是当满足特定的条件时Spring容器才创建Bean,Spring中通过@Conditional注解来实现条件化配置bean package com.sl.ioc;import org.springframework.context.annotation.Bean;...

Java-老刘
05/07
0
0
spring梳理(二) 基于注解的方式注册bean

我们知道,如果想要将bean交由spring容器管理,就需要首先将bean注册在spring容器中,而bean可以通过xml或者注解的方式进行注册,基于xml的配置一般是通过、等xml标签进行配置,然后由sprin...

wyn_lin
05/25
0
0
[转载]69道Spring面试题和答案

原文地址 http://ifeve.com/spring-interview-questions-and-answers/ 目录 Spring 概述 依赖注入 Spring beans Spring注解 Spring数据访问 Spring面向切面编程(AOP) Spring MVC Spring 概......

王木东
2017/03/27
0
0
Spring源码解析系列之IOC容器(一)

前言 实际上我所有的博客都是原来对原来印象笔记里笔记内容的加工,关于Spring源码自己已经解析了很多遍,但是时间长总是忘记,写一篇博客权当加强记忆,也算再次学习下大师们的设计思想,思...

后厂村老司机
06/02
0
0
Quartz与Spring的整合-Quartz中的job如何自动注入spring容器托管的对象

问题 Quartz中的job是由Quartz框架动态创建的(配置该job的classname,通过反射创建),而job一般会依赖到配置在spring中的bean,怎样获取或者更好的自动注入这些依赖bean呢? 预期效果 我们...

天外飞鱼
2014/07/13
0
0
Spring面试基本问题(1)

1、什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员...

yaohong
2016/11/08
0
0
Spring面试问答Top 25

本人收集了一些在大家在面试时被经常问及的关于Spring的主要问题,这些问题有可能在你下次面试时就会被问到。对于本文中未提及的Spring其他模块,我会单独分享面试的问题和答案。 欢迎大家向...

赵小宾
2015/05/04
0
1
Spring Ioc (Inversion of Control)

以下整理自http://jinnianshilongnian.iteye.com/blog/1413846,如有侵权立即删除。 Ioc Ioc(Inversion of Control),即控制反转。不是什么技术,而是一种设计思想。在Java开发中,Ioc意味...

冰雷卡尔
2012/07/31
0
0
1000行代码读懂Spring(二)- 在Spring中实现AOP

关于AOP AOP是Spring核心功能之一。今天就用tiny-spring来实现一个AOP。具体功能会包括: 读取AspectJ格式的Pointcut描述。 使用JDK动态代理以及CGLib两种方式进行AOP织入。 AOP分为配置(Po...

黄亿华
2014/01/20
0
3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java 重写排序规则,用于代码层级排序

1.dataList 是个List<Map<String,Object>> 类型的数据,所以比较的时候是冲map中获取数据,并且数据不能为空。 2.dataList 类型是由自己定义的,new Comparator<Map<String,Object>> 也是对应......

轻量级赤影
5分钟前
0
0
分布式大型互联网企业架构!

摘要: 开发工具 1.Eclipse IDE:采用Maven项目管理,模块化。 2.代码生成:通过界面方式简单配置,自动生成相应代码,目前包括三种生成方式(增删改查):单表、一对多、树结构。生成后的代码...

明理萝
5分钟前
0
1
对MFC程序的一点逆向分析:定位按钮响应函数的办法

因为消息响应函数保存在AFX_MSGMAP_ENTRY数组中, 观察nMessage、nCode、nID、pfn利用IDA在rdata段中搜索即可, 在IDA中找到代码段基址0x401000,函数地址0x403140, 在WinDbg中运行!addre...

oready
6分钟前
0
0
阻抗匹配与史密斯(Smith)圆图基本原理

参考:http://bbs.eeworld.com.cn/thread-650695-1-1.html

whoisliang
11分钟前
0
0
maven配置文件分离

一、 简介 遇到很多次别人处理的项目,测试环境,本地开发和线上环境的配置不一样,每一次部署都要重新修改配置文件,提交审核代码,才能打包,非常不方便。 其实相信很多人都知道可以使用m...

trayvon
11分钟前
0
0
MacOS和Linux内核的区别

导读 有些人可能认为MacOS和Linux内核有相似之处,因为它们可以处理类似的命令和类似的软件。甚至有人认为苹果的MacOS是基于linux的。事实上,这两个内核的历史和特性是非常不同的。今天,我...

问题终结者
28分钟前
1
0
SpringBoot | 第八章:统一异常、数据校验处理

前言 在web应用中,请求处理时,出现异常是非常常见的。所以当应用出现各类异常时,进行异常的捕获或者二次处理(比如sql异常正常是不能外抛)是非常必要的,比如在开发对外api服务时,约定了响...

oKong
35分钟前
2
0
mysql高级

一、存储引擎 InnoDB MyISAM 比较 二、数据类型 整型 浮点数 字符串 时间和日期 三、索引 索引分类 索引的优点 索引优化 B-Tree 和 B+Tree 原理 四、查询性能优化 五、切分 垂直切分 水平切分...

丁典
56分钟前
1
0
rsync通过同步服务、系统日志、screen工具

rsync通过后台服务同步 在远程主机中建立一个rsync服务器,在服务器上配置好rsync的各种应用,然后将本机作为rsync的一个客户端连接远程的rsync服务器。 首先在A机器上建立并且配置rsync的配...

黄昏残影
今天
5
0
Spring Cloud Gateway 接口文档聚合实现

在微服务架构下,通常每个微服务都会使用Swagger来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,毕竟懒是程序员的美德。 由于swagger2暂时不支持webflux 走...

冷冷gg
今天
150
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部