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. 【转载】Python中的正则表达式教程

    本文http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 正则表达式经常被用到,而自己总是记不全,转载一份完整的以备不时之需. 1. ...

  2. (python)leetcode刷题笔记03 Longest Substring Without Repeating Characters

    3. Longest Substring Without Repeating Characters Given a string, find the length of the longest sub ...

  3. Head First设计模式之生成器模式

    一.定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.建造者模式是一种对象创建型模式. 二.结构 角色 Builder(抽象建造者):它为创建一个产品Product对象的 ...

  4. 转载:DNS解析过程详解

    2015-09-20 此好文是转载,如有侵权联系我,立马删掉 DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com. ...

  5. idea创建Maven多模块项目

    最近几天学习到了创建多模块项目,应为自己使用的是Idea,所以想用idea创建多模块,查阅了相关资料后,自己做一个记录. 一.首先创建一个maven项目 Parent Project,创建xxx-ro ...

  6. JAVA类的创建: 创建JAVA的类 ,JAVA的字段,JAVA类的方法

    1. 创建Java的类 如果说Java的一切都是对象,那么类型就是决定了某一类对象的外观与行为.可是类型的关键字不是type,而是class,创建一个新的类型要用下面的代码: 1 2 3 class ...

  7. ssh整合开发

    ssh整合思想 ssh整合 第一步:导入ssh相关jar包 第二步:搭建struts环境   (1)创建 action  struts.xml配置文件, 配置action struts.xml约束 & ...

  8. 正确显示textarea中输入的回车和空格

    在textarea中输入的文本.如果含有回车或空格.在界面上显示的时候则不那么正常.回车消失了,空格变短了. 如何解决这个问题呢.有2种方法. 1.使用<pre>标签 w3c对pre元素是 ...

  9. python并发编程之多线程

    一  同步锁 注意: 1线程抢的是GIL锁,GIL锁就是执行权限,拿到权限后才能拿到互斥锁Lock,但是如果发现Lock没有被释放而阻塞,则立即交出拿到的执行权. 2join是等待所有,即整体串行,而 ...

  10. java String 不可变

    关于String不可变的问题也看了很多,最近看了一篇讲的非常好的文章,总结如下 所谓的不可变,并非真的不可变String s = "123"; s = "456" ...