【bean配置】

在XML文件中通过bean节点来配置bean

 <!--
配置bean
class: bean的全类名,通过反射的方式在IOC容器中创建bean,所以要求bean中必须有无参的构造器。
id:标识容器中的bean,id唯一。
-->
<bean id="helloWorld" class="com.hk.beans.HelloWorld">
<property name="name" value="Spring"></property>
</bean>

id:bean的名称。

--在IOC容器中必须是唯一的。

--若id没有指定,Spring自动将对应类名作为bean的名字。

--id可以指定多个名字,名字之间可用逗号,分号,或空格分隔。

【注】:

当bean中不存在无参构造器,存在有参构造器时,运行程序,会出现以下错误:

【Spring容器】

--ApplicationContext代表容器,但实际上它是一个接口。

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

--Spring提供了两种类型的IOC容器实现。

(1)BeanFactory:IOC容器的基本实现。

(2)ApplicationContext:提供了更多的高级特性。是BeanFactory的子接口。

BeanFactory是Spring框架的基础设施,面向Spring本身;

ApplicationContext面向使用Spring框架的开发者,几乎所有的应用场合都直接使用ApplicationContext而非底层的BeanFactory。

无论使用何种方式,配置文件是相同的。

【ApplicationContext】

1.ApplicationContext的主要实现类:

--ClassPathXmlApplicationContext:从类路径下加载配置文件。

--FileSystemXmlApplicationContext:从文件系统中加载配置文件。

2.ConfigurableApplicationContext(子接口)扩展于ApplicationContext,新增加两个主要方法:refresh()和close(),让ApplicationContext具有启动、刷新和关闭上下文的能力。

3.ApplicationContext在初始化上下文的时候就实例化所有单例的bean。

4.WebApplicationContext是专门为WEB应用而准备的,它允许从相对于WEB根目录的路径中完成初始化工作。

【从IOC容器中获取bean】

1.调用ApplicationContext的getBean()方法。该方法是在ApplicationContext的父接口BeanFactory中定义实现的。

由图中可知,还可以由类型获取bean。

 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld helloWorld = ctx.getBean(HelloWorld.class);

缺点!!:如果在IOC容器中此类型不唯一(有两个或以上相同类型的bean时),会出错。

---小结:

 //2. 从IOC容器中获取Bean实例
//方式一:利用id定位到IOC容器中的bean
//HelloWorld helloWorld = (HelloWorld) ctx.getBean("helloWorld");
//方式二:利用类型返回IOC容器中的bean,但要求IOC容器中必须只能有一个该类型的bean
HelloWorld helloWorld = ctx.getBean(HelloWorld.class);

【依赖注入的方式】

Spring支持3种依赖注入的方式:

--属性输入

--构造器注入

--工厂方式(很少使用,不推荐)

1.属性注入

(1)概述:属性注入即通过setter方法注入Bean的属性值或以来的对象。

(2)属性注入使用<property>元素,使用name属性指定Bean的属性名称,value属性或<value>子节点指定属性值。

(3)属性注入是实际应用中最常用到的注入方式。

    <bean id="helloWorld" class="com.hk.beans.HelloWorld">
<property name="name" value="Spring"></property>
</bean>

2.构造方法注入

(1)通过构造方法注入Bean的属性值或依赖的对象,它保证了Bean实例在实例化后就可以使用。

(2)构造器注入在<constructor-arg>元素里声明属性,<constructor-arg>中没有name属性。

Car.java:

 package com.hk.beans;

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

配置文件代码:

 <!-- 通过构造方法来配置bean的属性 -->
<bean id="car" class="com.hk.beans.Car">
<constructor-arg value="BWM" index="0"></constructor-arg>
<constructor-arg value="ShangHai" index="1"></constructor-arg>
<constructor-arg value="100000" type="double"></constructor-arg>
</bean> <!-- 使用构造器注入属性值可以指定参数的位置和参数的类型!以区分重载的构造器! -->
<bean id="car2" class="com.hk.beans.Car">
<constructor-arg value="bieke" type="java.lang.String"></constructor-arg>
<constructor-arg value="BeiJing" type="java.lang.String"></constructor-arg>
<constructor-arg value="150" type="int"></constructor-arg>
</bean>

(测试)Main.java:

         ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

         Car car = (Car) ctx.getBean("car");
System.out.println(car); car = (Car) ctx.getBean("car2");
System.out.println(car);

运行结果;

配置bean的更多相关文章

  1. Spring下如何配置bean

    本次讲述项目背景: 创建Service类,Service下用到dao类.通过在Spring中配置bean,实现在项目启动时,自动加载这个类 本次只讲述配置bean的注意事项,故只给出简单实例: 创建S ...

  2. Spring学习记录(十)---使用FactoryBean配置Bean

    之前学了,配置bean可以用普通全类名配置.用工厂方法配置,FactoryBean又是什么呢 有时候配置bean要用到,IOC其他Bean,这时,用FactoryBean配置最合适. FactoryB ...

  3. Spring学习记录(九)---通过工厂方法配置bean

    1. 使用静态工厂方法创建Bean,用到一个工厂类 例子:一个Car类,有brand和price属性. package com.guigu.spring.factory; public class C ...

  4. Spring--通过注解来配置bean【转】

    Spring通过注解配置bean 基于注解配置bean 基于注解来配置bean的属性在classpath中扫描组件 组件扫描(component scanning):Spring能够从classpat ...

  5. spring 配置bean

    Main(测试方法) public class Main { public static void main(String[] args) { //1.创建Spring 的IOC容器对象: //spr ...

  6. [原创]java WEB学习笔记103:Spring学习---Spring Bean配置:基于注解的方式(基于注解配置bean,基于注解来装配bean的属性)

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. 通过工厂方式配置bean

    src\dayday\CarFactoryBean.java package dayday;import org.springframework.beans.factory.FactoryBean;/ ...

  8. Spring 学习笔记 3. 尚硅谷_佟刚_Spring_配置 Bean

    1,bean 的配置 <bean id="helloWorld" class="com.yfy.HelloWorld"> <property ...

  9. Spring-Context之三:使用XML和Groovy DSL配置Bean

    在第一讲中显示了如何使用注解配置bean,其实这是Spring3引进的特性,Spring2使用的是XML的方式来配置Bean,那时候漫天的XML文件使得Spring有着配置地狱的称号.Spring也一 ...

  10. [原创]java WEB学习笔记99:Spring学习---Spring Bean配置:自动装配,配置bean之间的关系(继承/依赖),bean的作用域(singleton,prototype,web环境作用域),使用外部属性文件

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. Android推送服务(2)微信智能心跳方案

    http://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=207243549&idx=1&sn=4ebe4beb8123f1b5 ...

  2. 416 Partition Equal Subset Sum 分割相同子集和

    详见:https://leetcode.com/problems/partition-equal-subset-sum/description/ C++: class Solution { publi ...

  3. suricata.yaml (一款高性能的网络IDS、IPS和网络安全监控引擎)默认配置文件(图文详解)

    不多说,直接上干货! 前期博客 基于CentOS6.5下Suricata(一款高性能的网络IDS.IPS和网络安全监控引擎)的搭建(图文详解)(博主推荐) 或者 基于Ubuntu14.04下Suric ...

  4. AJPFX关于throw、throws关键字的解析

    throw.throws关键字 throw关键字: 是用于方法体内部,用来抛出一个Throwable类型的异常.如果抛出了检查异常, 则还应该在方法头部声明方法可能抛出的异常类型.该方法的调用者也必须 ...

  5. SpringMvc如何将Url 映射到 RequestMapping (一)

    SpringMvc Url 匹配规则详解 最近开始阅读Spring 源码,虽然用了很久的spring ,但是没有真正的分析过Spring时如何工作的.今天重 MVC 的Url匹配规则开始进行Sprin ...

  6. Python3 动手自己写谷歌翻译

    本篇为实现谷歌翻译的功能,在编写的时候以为只是一个接口的问题. 没想到的是每次翻译都会触发一次JS的执行,在请求参数中生成一个tk. 文中tk的实现是复用的网上大神的代码生成tk. 好了,不说了直接看 ...

  7. Android常规布局(网络异常布局、空数据布局,未登录布局等)切换工具类,Layout切换

    本人已整理好发布到github,已优化. github地址:https://github.com/buhuiming/StatusLayoutManager 使用:compile 'com.bhm.s ...

  8. 使用Jenkins进行android项目的自动构建(3)

    建立Jenkins项目 1. “新增作业”->填写作业名称->选择“建置 Maven 2 或 3 專案”->OK.新增成功后会进入“組態設定”,暂时先保留默认值,稍后再进行设定. 2 ...

  9. jQuery核心语法

    .each只是处理jQuery对象的方法,jQuery还提供了一个通用的jQuery.each方法,用来处理对象和数组的遍历 jQuery/($).each(array, callback )jQue ...

  10. python学习笔记-02

    四.函数 1.定义函数 (1)定义规则 介绍列表方法的时候已经大概说过函数,学过数学的人都知道函数,给一个参数返回一个值.函数也可以自己定义.用如下的格式: >>>def 函数名(参 ...