1、属性注入

(1)根据setter方法属性注入,这里使用的是property标签。需要bean属性提供对应的setter方法,比如笔记(1)里的 HelloWorld使用的就是这种方法。

<!-- 根据setter方法属性注入 -->
<bean id="helloworld" class="com.broadtext.beans.Helloworld">
<property name="name" value="Helloworld"></property>
</bean>

(2)根据构造器属性注入,这里使用的是constructor-arg标签。可以不提供setter方法,但是要提供对应的构造器,如果缺少构造器或者构造器里缺少属性就会报错。可以指定参数的位置(index)和类型(type)以区分参数。特殊字符可以使用<![CDATA[<Shanghai>]]>

<!-- 根据构造器属性注入,可以指定参数的位置和类型以区分参数 -->
<bean id="car" class="com.broadtext.beans.Car">
<constructor-arg index="0" value="Audi"></constructor-arg>
<constructor-arg value="Shanghai"></constructor-arg>
<constructor-arg type="double" value="300000"></constructor-arg>
</bean>
<bean id="car2" class="com.broadtext.beans.Car">
<constructor-arg value="BMW"></constructor-arg>
<constructor-arg>
<value><![CDATA[<Shanghai>]]></value>
</constructor-arg>
<constructor-arg type="int" value="240"></constructor-arg>
</bean>

2、通过ref属性建立bean之间的关系,这里在创建person bean的时候会将配置好的car2作为属性注入到person bean里,如果ref指向一个不存在的bean会报undefine错误。

<!-- ref属性建立bean之间的关系 -->
<bean id="person" class="com.broadtext.beans.Person">
<property name="name" value="Tom"></property>
<property name="age" value="24"></property>
<property name="car" ref="car2"></property>
</bean>

3、配置内部bean

<!-- 内部bean不能被外部使用 -->
<bean id="person1" class="com.broadtext.beans.Person">
<property name="name" value="Tom"></property>
<property name="age" value="24"></property>
<property name="car">
<bean class="com.broadtext.beans.Car">
<constructor-arg value="Ford"></constructor-arg>
<constructor-arg value="Shanghai"></constructor-arg>
<constructor-arg type="double" value="300000"></constructor-arg>
</bean>
</property>
</bean>

4、null值的注入

<!-- 测试null值和构造注入 -->
<bean id="person2" class="com.broadtext.beans.Person">
<constructor-arg value="Jreey"></constructor-arg>
<constructor-arg value="24"></constructor-arg>
<constructor-arg><null></null></constructor-arg>
</bean>

5、为级联属性注入

<!-- 级联属性赋值 -->
<bean id="person3" class="com.broadtext.beans.Person">
<constructor-arg value="Jreey"></constructor-arg>
<constructor-arg value="24"></constructor-arg>
<!-- 要先初始化才可以为级联属性赋值,否则会报null错误 -->
<constructor-arg ref="car"></constructor-arg>
<property name="car.maxSpeed" value="250"></property>
</bean>

6、Car.java、Person.java、Main.java

Car.java

package com.broadtext.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;
} public Car(String brand, String corp, int maxSpeed) {
super();
this.brand = brand;
this.corp = corp;
this.maxSpeed = maxSpeed;
} @Override
public String toString() {
return "Car [brand=" + brand + ", corp=" + corp + ", price=" + price + ", maxSpeed=" + maxSpeed + "]";
} public String getBrand() {
return brand;
} public void setBrand(String brand) {
this.brand = brand;
} public String getCorp() {
return corp;
} public void setCorp(String corp) {
this.corp = corp;
} public double getPrice() {
return price;
} public void setPrice(double price) {
this.price = price;
} public int getMaxSpeed() {
return maxSpeed;
} public void setMaxSpeed(int maxSpeed) {
this.maxSpeed = maxSpeed;
} }

Person.java

package com.broadtext.beans;

public class Person {
private String name;
private int age;
private Car car; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Car getCar() {
return car;
} public void setCar(Car car) {
this.car = car;
} @Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";
} public Person() {
} public Person(String name, int age, Car car) {
super();
this.name = name;
this.age = age;
this.car = car;
} }

Main.java

package com.broadtext.beans;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) { //ApplicationContext IOC容器
//ClassPathXmlApplicationContext IOC容器的实现类
//走完这一步就会创建出XML里面配的bean
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); //根据配置bean的id获取
Helloworld helloworld = (Helloworld) ctx.getBean("helloworld");
System.out.println(helloworld.getName());
//根据配置bean的类型获取
helloworld = ctx.getBean(Helloworld.class);
System.out.println(helloworld.getName()); //构造器属性注入
Car car = (Car) ctx.getBean("car");
System.out.println(car.toString());
car = (Car) ctx.getBean("car2");
System.out.println(car.toString()); //ref
Person person = (Person) ctx.getBean("person");
System.out.println(person.toString());
//内部bean
person = (Person) ctx.getBean("person1");
System.out.println(person.toString());
person = (Person) ctx.getBean("person2");
System.out.println(person.toString());
person = (Person) ctx.getBean("person3");
System.out.println(person.toString()); } }

Spring框架学习笔记(3)——配置bean的更多相关文章

  1. 跟着刚哥学习Spring框架--通过注解方式配置Bean(四)

    组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 特定组件包括: 1.@Component:基本注解,识别一个受Spring管理的组件 2.@Resposit ...

  2. 跟着刚哥学习Spring框架--通过XML方式配置Bean(三)

    Spring配置Bean有两种形式(XML和注解) 今天我们学习通过XML方式配置Bean 1. Bean的配置方式 通过全类名(反射)的方式   √ id:标识容器中的bean.id唯一. √ cl ...

  3. Spring框架学习笔记(5)——Spring Boot创建与使用

    Spring Boot可以更为方便地搭建一个Web系统,之后服务器上部署也较为方便 创建Spring boot项目 1. 使用IDEA创建项目 2. 修改groupid和artifact 3. 一路n ...

  4. Spring框架学习笔记(1)

    Spring 框架学习笔记(1) 一.简介 Rod Johnson(spring之父) Spring是分层的Java SE/EE应用 full-stack(服务端的全栈)轻量级(跟EJB比)开源框架, ...

  5. Spring框架学习笔记(8)——spring boot+mybatis plus+mysql项目环境搭建

    之前写的那篇Spring框架学习笔记(5)--Spring Boot创建与使用,发现有多小细节没有提及,,正好现在又学习了mybatis plus这款框架,打算重新整理一遍,并将细节说清楚 1.通过I ...

  6. Spring框架学习笔记(3)——SpringMVC框架

    SpringMVC框架是基于Spring框架,可以让我们更为方便的进行Web的开发,实现前后端分离 思路和原理 我们之前仿照SpringMVC定义了一个自定义MVC框架,两者的思路其实都是一样的. 建 ...

  7. Spring框架学习之注解配置与AOP思想

         上篇我们介绍了Spring中有关高级依赖关系配置的内容,也可以调用任意方法的返回值作为属性注入的值,它解决了Spring配置文件的动态性不足的缺点.而本篇,我们将介绍Spring的又一大核心 ...

  8. [ SSH框架 ] Spring框架学习之二(Bean的管理和AOP思想)

    一.Spring的Bean管理(注解方式) 1.1 什么是注解 要使用注解方式实现Spring的Bean管理,首先要明白什么是注解.通俗地讲,注解就是代码里的特殊标记,使用注解可以完成相应功能. 注解 ...

  9. spring框架学习笔记7:事务管理及案例

    Spring提供了一套管理项目中的事务的机制 以前写过一篇简单的介绍事务的随笔:http://www.cnblogs.com/xuyiqing/p/8430214.html 还有一篇Hibernate ...

随机推荐

  1. C++ 头文件系列(stdexcept)

    预定义异常类 这个头文件包含的内容非常简单,只包含9个异常类,均从exception类派生,因此我们用三张图来描述: 这里仅解释两点: overflow : 指值的大小超过 整型 变量能表示的范围,即 ...

  2. JS画几何图形之四【饼图】

    饼图是将一个圆分割为多个扇形. 样例:http://www.zhaojz.com.cn/demo/draw8.html 依赖:[扇形] //饼图 //dot 圆点 //r 半径 //data 数据(一 ...

  3. CGO 类型(CGO Types) 一

    CGO Types C作为一种混合编程语言已经很久了,无论那些广泛使用的包是用何种语言实现的,都导出了和C兼容的API.Go程序调用C程序,可以借助两种工具实现,一种是cgo,另一种是SWIG工具.C ...

  4. getComputedStyle与currentStyle获取样式(style/class)

    今天看jQuery源码CSS部分,里面用到了currentStyle和getComputedStyle来获取外部样式. 因为elem.style.width只能获取elem的style属性里的样式,无 ...

  5. [APIO2010]特别行动队

    题目描述 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑,同一支特别行动队中队员的编号 应该连续,即为形如(i, i + 1, ...

  6. ORA-00600[17059]错误

    ORA-00600[17059] ORA-00600[17059]错误大部分都是因为高版本导致,对于本库的分析:因为该库的 shared pool老化比较频繁,到我介入的时候,发现相关该类此sql已经 ...

  7. 微信小程序开发之普通链接二维码

    本文主要介绍扫普通链接二维码打开小程序, 详情请看官方文档https://mp.weixin.qq.com/debug/wxadoc/introduction/qrcode.html 配置普通链接二维 ...

  8. SQL SERVER 日期转换大全

    博客转自:http://blog.csdn.net/baiduandxunlei/article/details/9180075 CONVERT(data_type,expression[,style ...

  9. Spring之设置Bean值

    Java实例的属性值可以有很多种数据类型.基本类型值.字符串类型.java实例甚至其他的Bean实例.java集合.数组等.所以Spring允许通过如下几个元素为Bean实例的属性指定值: value ...

  10. 关于linux下的date日期,并以日期给文件命名

    在linux的终端中,我们输入date后会有以下显示: 然后博主也扩展了一下date的基础用法: date + "%-": %y 输出年份的后2位:%Y 输出完整年份 %m 输出月 ...