从头认识Spring-1.7 怎样通过属性注入Bean?(2)-怎样通过属性向对象注入另一个对象的引用?

这一章节我们继续上面的话题。

2.怎样通过属性向对象注入另一个对象的引用?

(1)domain

我们除了蛋糕类,还需要引用前面的厨师类

package com.raylee.my_new_spring.my_new_spring.ch01.topic_1_7;

public class Cake {

	private final int id = index++;

	private static int index = 0;

	private String name = "";

	private double size = 0;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public double getSize() {
		return size;
	}

	public void setSize(double size) {
		this.size = size;
	}

	public int getId() {
		return id;
	}

	@Override
	public String toString() {
		return "create the cake,its id:" + id + ", size:" + size + " inch ,name:" + name;
	}
}

蛋糕类不变

package com.raylee.my_new_spring.my_new_spring.ch01.topic_1_7;

public class Chief {

	private Cake cake = null;

	public Cake getCake() {
		return cake;
	}

	private String name = "";

	public Chief(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setCake(Cake cake) {
		this.cake = cake;
	}

	private final int id = index++;

	public int getId() {
		return id;
	}

	private static int index = 0;

	public Cake makeOneCake() {
		return cake;
	}

}

我们在厨师类上面加上蛋糕这一个属性,同时也为这个厨师加上名称属性

(2)测试类

package com.raylee.my_new_spring.my_new_spring.ch01.topic_1_7;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
		"/com/raylee/my_new_spring/my_new_spring/ch01/topic_1_7/ApplicationContext-test.xml" })
public class ChiefTest {

	@Autowired
	private ApplicationContext applicationContext;

	@Test
	public void testChief() {
		Chief chief = applicationContext.getBean(Chief.class);
		System.out.println("chief name:" + chief.getName());
		System.out.println(chief.getName() + " make a cake ,cake‘s name :" + chief.makeOneCake().getName());
	}
}

主要负责get那个Bean,然后打印厨师的名称和所做的蛋糕

(3)配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd
		http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
	<bean id="cake"
		class="com.raylee.my_new_spring.my_new_spring.ch01.topic_1_7.Cake">
		<property name="name" value="Blueberry Cheesecake" />
		<property name="size" value="7" />
	</bean>
	<bean id="chief"
		class="com.raylee.my_new_spring.my_new_spring.ch01.topic_1_7.Chief">
		<constructor-arg value="jack" />
		<property name="cake" ref="cake" />
	</bean>

</beans>

配置文件里面

A.cake不变

B.在chief的Bean里面引用上面已经生产的cake的Bean,同时也在构造器里面赋予名称

但是这里需要注意一点的是:ref里面的值,必须是你配置文件里面拥有的Bean的id,这里严格大小写,也就是说

<bean id="chief"
		class="com.raylee.my_new_spring.my_new_spring.ch01.topic_1_7.Chief">
		<constructor-arg value="jack" />
		<property name="cake" ref="Cake" />
	</bean>

<bean id="chief"
		class="com.raylee.my_new_spring.my_new_spring.ch01.topic_1_7.Chief">
		<constructor-arg value="jack" />
		<property name="cake" ref="cake" />
	</bean>

两者完全是不一样的

测试输出:

chief name:jack
jack make a cake ,cake‘s name :Blueberry Cheesecake

总结:这一章节主要介绍了怎样通过属性向对象注入另一个对象的引用,还有里面需要注意的地方。

目录:http://blog.csdn.net/raylee2007/article/details/50611627

我的github:https://github.com/raylee2015/my_new_spring

时间: 2024-10-07 05:30:04

从头认识Spring-1.7 怎样通过属性注入Bean?(2)-怎样通过属性向对象注入另一个对象的引用?的相关文章

JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring? Spring是分层的JavaSE/EE full-stack(一站式)轻量级开源框架. 所谓分层: SUN提供的EE的三层结构:web层.业务层.数据访问层(也称持久层,集成层). Struts2是web层基于MVC设计模式框架. Hibernate是持久的一个ORM的框架. 所谓一站式:Spring框架有对三层的每层解决方案.

spring Ioc容器之使用XML配置Bean

1.项目截图 2.创建xml文件 3.打印机接口 package com.example.demo.computerTest; public interface Printer { void init(); void print(String txt); } 4.彩色打印机 package com.example.demo.computerTest; public class ColorPrinter implements Printer { @Override public void init

spring boot 动态注入bean

方法一 SpringContextUtil public class SpringContextUtil { private static ApplicationContext applicationContext; //获取上下文 public static ApplicationContext getApplicationContext() { return applicationContext; } //设置上下文 public static void setApplicationCont

Spring中使用Map、Set、List、数组、属性集合的注入方法配置文件

(1)下边的一个java类包含了所有Map.Set.List.数组.属性集合等这些容器,主要用于演示Spring的注入配置: package com.lc.collection; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; public class Department { private String name; private String []

反射-Spring管理Bean,注入Bean属性的反射机制。

#反射 1.是JAVA API,是Java提供的现成的类!! --接受API提供的功能! 2. 是Java提供的动态执行机制,动态加载类,动态创建对象,动态访问属性,动态调用方法. ##反射用途 1. eclipse 中解析类的结构使用了反射 2.JUnit识别被测试方法使用了反射 -- JUnit3 利用了反射查找test开头的方法 -- JUnit4 利用了反射解析@Test查找测试方法 3.Spring 管理Bean对象,注入Bean属性使用了反射 --利用反射创建Bean对象实例 --利

从头认识Spring-1.7 怎样通过属性注入Bean?(1)-怎样通过属性向对象注入值?

这一章节我们来讨论一下怎样通过属性注入Bean? 这一章节分为两部分,第一部分我们通过属性向对象注入值,第二部分我们通过属性向对象注入另一个对象的引用. 1.怎样通过属性向对象注入值? (1)domain package com.raylee.my_new_spring.my_new_spring.ch01.topic_1_7; public class Cake { private final int id = index++; private static int index = 0; pr

Spring核心学习(3)为Bean注入属性

前导:开始学习Spring核心思想,通过一个山寨精简版Spring代码结合学习. 内容:1.Propertyvalue-保存属性注入信息.2.AutowireCapableBeanFactory-可自动装配的BeanFactory. 这里我们重新定义了BeanDefinition,增加了属性列表这个字段,我们将为bean附加额外的属性,所以我们又定了PropertyValues.PropertyValue来辅助,当我们为bean定义的时候同时设置他的属性,通过反射机制来动态的附加到bean里,来

Spring学习笔记--注入Bean属性

这里通过一个MoonlightPoet类来演示了注入Bean属性property的效果. package com.moonlit.myspring; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.springframework.context.ApplicationContext; import org.springframework.context.support.Clas

Spring IOC 容器源码分析 - 填充属性到 bean 原始对象

1. 简介 本篇文章,我们来一起了解一下 Spring 是如何将配置文件中的属性值填充到 bean 对象中的.我在前面几篇文章中介绍过 Spring 创建 bean 的流程,即 Spring 先通过反射创建一个原始的 bean 对象,然后再向这个原始的 bean 对象中填充属性.对于填充属性这个过程,简单点来说,JavaBean 的每个属性通常都有 getter/setter 方法,我们可以直接调用 setter 方法将属性值设置进去.当然,这样做还是太简单了,填充属性的过程中还有许多事情要做.

03 Spring框架 bean的属性以及bean前处理和bean后处理

上一节我们给出了三个小demo,具体的流程是这样的: 1.首先在aplicationContext.xml中添加<bean id="自定义id" class="包名.类名">.(还有两种工厂配置) 2.其次写一个自定义类,里面只包含一个系统输出的show(). 3.使用 ApplicationContext hw=new classpathXmlApplicationContext("applicationContext.xml");