在spring的IOC容器中配置Bean

一,在xml中通过bean节点来配置bean:

class:bean的类名,通过反射的方式在IOC容器中创建Bean,所以要求bean中必须有无参的构造器
id:标识容器中的bean,id唯一

在IOC容器读取bean配置创建Bean实例之前,必须对他进行初始化,只有实例化之后,才可以从IOC容器获取bean实例并使用。

spring提高了两种类型的IOC实现。

applicationContext主要实现类:

applicationContext在初始化上下文的shi'h就实例化所有单例的bean。

从IOC容器获取bean的方式:

//利用ID定位到IOC容器的bean
HelloWord helloword=(HelloWord) ctx.getBean("helloWord");//getBean里面的参数是配置的bean的ID
//利用类型返回IOC容器中的bean,但要求该容器中只能有一种该类型的bean
HelloWord helloword2=(HelloWord) ctx.getBean(HelloWord.class);//getBean里面的参数是配置的bean的ID

spring依赖注入的三种方式:

1,属性注入

2,构造器注入,

3,工厂方法注入(很少使用,不推荐)

第二种方法:

例子:

创建一个car类:下面有两个重载的构造方法。

package com.spring.beans;

public class Car {

    private String brand;
private String crop;
private int price;
private double maxSpeed; public Car(String brand, String crop, int price) {
super();
this.brand = brand;
this.crop = crop;
this.price = price;
} public Car(String brand, String crop, double maxSpeed) {
super();
this.brand = brand;
this.crop = crop;
this.maxSpeed = maxSpeed;
} @Override
public String toString() {
return "Car [brand=" + brand + ", crop=" + crop + ", price=" + price + ", maxSpeed=" + maxSpeed + "]";
} }

添加配置:通过constructor-arg配置value,分别对应构造方法里面的参数。

由于上面的类有两个构造方法,使用构造器注入属性值可以指定参数的位置和参数类型,用以区分重载的构造器

<!-- 通过构造方法配置bean的属性 -->
<bean id="car" class="com.spring.beans.Car" >
<constructor-arg value="Audi" index="0"></constructor-arg>
<constructor-arg value="shanghai" index="1"></constructor-arg>
<constructor-arg value="3000" index="2" type="double"></constructor-arg>
</bean> <!-- 使用构造器注入属性值可以指定参数的位置和参数类型,用以区分重载的构造器-->
<bean id="car2" class="com.spring.beans.Car" >
<constructor-arg value="Audi" index="0" type="java.lang.String"></constructor-arg>
<constructor-arg value="shanghai" index="1" type="java.lang.String"></constructor-arg>
<constructor-arg value="200" index="2" type="int"></constructor-arg>
</bean>

在main方法里面使用:把car打印出来(调用car的tostring方法)

         //1,创建spring的IOC容器对象
//ApplicationContext代表IOC容器
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");//指定配置文件名 Car car=(Car) ctx.getBean("car");
Car car2=(Car) ctx.getBean("car2");
System.out.println(car);
System.out.println(car2);

结果:

上面的配置出来这个写法,还可以写成value子节点的形式:

    <bean id="car2" class="com.spring.beans.Car" >
<constructor-arg value="Audi" index="0" type="java.lang.String"></constructor-arg>
<constructor-arg value="shanghai" index="1" type="java.lang.String"></constructor-arg>
<constructor-arg type="double">
<value>250</value>
</constructor-arg>
</bean>

02-spring学习-配置bean的更多相关文章

  1. spring 学习之 bean 的注入方式 property和constructor-arg的使用方式

    spring 学习之 bean 的注入方式 property和constructor-arg的使用方式. bean的注入方式: property 注入是: 通过setxx方法注入. construct ...

  2. Spring学习七----------Bean的配置之自动装配

    © 版权声明:本文为博主原创文章,转载请注明出处 Bean的自动装配(Autowiring) no:不启用自动装配,此时需要手动注入.参考:Spring学习三----------注入方式 defaul ...

  3. Spring 学习笔记 Bean的作用域

    在配置文件中定义Bean时,用户不但可以配置Bean的属性值以及相互之间的依赖关系,还可以定义Bean的作用域.作用域将对Bean的生命周期和创建方式产生影响.在低版本的Spring中,仅有两个作用域 ...

  4. 5.spring:注解配置 Bean

    在classpath中扫描组件 组键扫描:能够从classpath下自动扫描,侦测和实例化具有特定注解的组件 特定的组件包括: ->@Componment:基于注解,标识一个受Spring管理的 ...

  5. Spring 学习之bean的理解

    前言:对于使用Spring框架的开发人员来说,我们主要做的主要有两件事情:①开发Bean;②配置Bean;而Spring帮我们做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法来完成“依 ...

  6. Spring 注解配置Bean

    一.使用注解配置Bean 1.注解 在类定义.方法定义.成员变量定义前使用.其简化<bean>标签,功能同<bean>标签.格式为: @注解标记名. 2.组件扫描 Spring ...

  7. spring FactoryBean配置Bean

    概要: 实例代码具体解释: 文件夹结构 Car.java package com.coslay.beans.factorybean; public class Car { private String ...

  8. Spring学习十一----------Bean的配置之基于Java的容器注解@Bean

    © 版权声明:本文为博主原创文章,转载请注明出处 @Bean -@Bean标识一个用于配置和初始化一个由SpringIOC容器管理的新对象的方法,类似于XML配置文件的<bean/> -可 ...

  9. Spring学习十----------Bean的配置之Autowired注解实现

    © 版权声明:本文为博主原创文章,转载请注明出处 @Required -@Required注解适用于bean属性的setter方法 -这个注解仅仅表示,受影响的bean属性必须在配置时被填充,通过在b ...

随机推荐

  1. hdu 5868 2016 ACM/ICPC Asia Regional Dalian Online 1001 (burnside引理 polya定理)

    Different Circle Permutation Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K ...

  2. cream 的qsqrt 及其原理

    首先,是creamk 的qsort: float Q_rsqrt( float number ) { long i; float x2, y; const float threehalfs = 1.5 ...

  3. Java并发(三):重排序

    在执行程序时为了提高性能,提高并行度,编译器和处理器常常会对指令做重排序.重排序分三种类型: 编译器优化的重排序.编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序. 指令级并行的重排序 ...

  4. Problem C: 矩阵对角线求和

    #include<stdio.h> int main() { ][]; scanf("%d",&n); ,sum2=; ;i<n;i++) ;j<n ...

  5. Problem F: 调用函数,判断各位数字立方和是否等于它本身

    #include<stdio.h> #include<math.h> int is(int number)//定义函数 { ; ) { s=number%; sum=sum+p ...

  6. JavaScript 开发的45个技巧

    JavaScript是一个绝冠全球的编程语言,可用于Web开发.移动应用开发(PhoneGap.Appcelerator).服务器端开发(Node.js和Wakanda)等等.JavaScript还是 ...

  7. TDiocpCoderTcpServer 使用

    TDiocpCoderTcpServer 使用 uses diocp_coder_tcpServer,utils_zipTools,diocp_tcp_server,diocp_task // 创建T ...

  8. express和json的调用

    在express工程里,建立app.js var express = require('express'); var app = express(); //数据接口 var newsdata=[{ ' ...

  9. selenium+python自动化88-批量操作循环点击报错:Element not found in the cache - perhaps the page has changed since it was looked up

    前言 selenium定位一组元素,批量操作循环点击的时候会报错:Element not found in the cache - perhaps the page has changed since ...

  10. 解决kylin报错:java.lang.IllegalStateException

    一个kylin build job执行到第三步Extract Fact Table Distinct Columns时报错: 2017-05-24 20:04:07,930 ERROR [pool-9 ...