文档章节

Spring创建bean的几种方法

雷速
 雷速
发布于 2017/05/31 16:19
字数 1007
阅读 41
收藏 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 beans? Spring beans 是那些形成Spring应用的主干的java对象。它们被Spring IOC容器初始化,装配,和管理。这些beans通过容器中配置的元数据创建。比如,以XML文件中 的形式定义...

spring小鸟
08/26
0
0
Spring实战读书笔记(1)

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

祥林会跟你远走高飞
2014/12/30
0
0
《Spring5学习》 02 装配Bean之基于JavaConfig装配Bean

尽管在大部分场景下通过组件扫描和自动装配实现Bean自动化配置是更为推荐的方式,但是也存在无法使用自动化装配的场景,例如当你需要为一些第三方库中的组件类创建Bean装配到你的应用中,这时...

老韭菜
08/12
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

没有更多内容

加载失败,请刷新页面

加载更多

权限框架Shiro学习之表结构设计

权限框架Shiro学习之表结构设计 Shiro是一款优秀的开源安全框架,学习Shiro大家可以参考张开涛老师的博客:跟我学Shiro,当然也可参考我之前的笔记:Shiro实现身份认证、Shiro实现授权。 在学...

TyCoding
28分钟前
1
0
find命令和文件名后缀

9月18日任务 2.23/2.24/2.25 find命令 2.26 文件名后缀 which which 搜索可执行文件,必须在PATH环境变量目录中!!否则无法搜到! [root@centos7 ~]# which lsalias ls='ls --color=auto'...

robertt15
31分钟前
1
0
阿里Java程序员必备的Intellij IDEA 插件

善用Intellij插件可大幅提升我们的效率,以下是我用过不错的Intellij插件,分享给大家希望能帮到大家。 1. .ignore 生成各种ignore文件,一键创建git ignore文件的模板,免得自己去写 2. lom...

我是你大哥
41分钟前
1
0
为什么Java大神,都在看Spring Boot和Spring Cloud的书?

如果你是一名Java开发人员,并且最近正打算学习Spring Boot和Spring Cloud框架并寻找一些关于它们的最好的书籍,那么,你今天就来对地方了。 本文,我们将讨论一些学习Spring Boot和Spring ...

Java小铺
59分钟前
12
0
springboot logback日志配置

springboot 如果不使用外部tomcat的话,日志是需要自己配置的,不然的话就只有控制台的日志,但是日志又是我们在项目上了生产环境,出问题时,检查问题的唯一途径,所以我们要配置详细的日志...

曾大大胖
59分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部