例子参考于:Spring系列教材 以及《轻量级JavaEE企业应用实战》

Axe.class

package com.how2java.bean;

public class Axe {
public String chop() {
return "使用斧头砍柴";
}
}

Person.class

package com.how2java.bean;

public class Person {
private Axe axe; public void setAxe(Axe axe) {
this.axe = axe;
} public void useAxe() {
System.out.println("我打算去砍点柴!");
System.out.println(axe.chop());
} }

BeanTest.class

package com.how2java.bean;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class BeanTest { public static void main(String[] args) {
// TODO Auto-generated method stub //创建Spring容器
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] {"beans.xml"});
/*
* Spring 容器获取Bean对象主要有如下两个方法
* 1).Object getBean(String id):根据容器中Bean的id来获取指定Bean,获取Bean之后要进行强制类型转换
* 2).T getBean(String name,Class<T> requiredType): 根据容器中的Bean的id来获取指定Bean,但该方法
* 带一个泛型参数,因此获取Bean后无须进行强制类型转换。
*/
//使用方法2).来获取id为person的Bean
Person p = ctx.getBean("person",Person.class); //使用方法1).来获取id为person的Bean
//Person p = (Person) ctx.getBean("person"); p.useAxe(); } }

beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- 配置名为person的Bean,其实现类为com.how2java.Person -->
<!-- 下面配置的property元素name为axe,该元素将驱动Spring以反射方式执行person Bean中的setAxe()方法,ref的属性值为
axe,该属性值指定以容器中名为axe的Bean作为执行setter方法的传入参数 也就是在底层,会执行一些方法,最终将name="axe"这个属性反射成setAxe()这个方法,然后因为下面的bean指定了一个名为axe的
Bean,因此通过ref="axe"来指定setter方法的参数为名为axe的Bean --> <bean id="person" class="com.how2java.bean.Person">
<!-- 控制调用setAxe()方法,将容器中的axe Bean作为传入参数 -->
<property name="axe" ref="axe" />
</bean> <!-- 配置名为axe的Bean,其实现类为com.how2java.Axe -->
<bean id="axe" class="com.how2java.bean.Axe" /> </beans>

笔记:

<property>作为<bean>的子元素,它驱动Spring在底层以反射执行一次setter方法,其中<property...>的name属性决定执行哪个setter方法,而value或者是ref决定执行setter方法传入的参数

那么什么时候用ref什么时候用value?

当传入参数是基本类型及其包装类、string等类型,使用value
如果以容器中其他Bean作为传入参数则使用ref指定传入参数

Spring的一个入门例子的更多相关文章

  1. spring的一个小例子(二)--解析前面的小例子

    接上篇:http://www.cnblogs.com/xuejupo/p/5236448.html 首先应该明白,一个web项目,web.xml是入口. 然后下面来分析上篇博客中出现的web.xml: ...

  2. spring aop 一个挡板例子

    import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.ann ...

  3. spring boot入门例子

    最近学习spring boot,总结一下入门的的基础知识 1新建maven项目,修改pom.xml <project xmlns="http://maven.apache.org/PO ...

  4. 一个简单的iBatis入门例子

    一个简单的iBatis入门例子,用ORACLE和Java测试 目录结构: 1.导入iBatis和oracle驱动. 2.创建类Person.java package com.ibeats;import ...

  5. Hibernate入门1 - Hibernate概述及第一个小例子

    一.什么是ORM? ORM,即Object Relational Mapping.我们知道,利用面向对象的思想编写的数据库应用程序最终都是把对象信息保存在关系型数据库中,于是需要编写与底层数据库相关的 ...

  6. Flexpaper二次开发入门教程》(十) Flexpaper简单使用-第一个Flexpaper例子

    4. Flexpaper简单使用 通过上面三章的内容,大家对Flexpaper.SWFTools应该有大概的了解了,SWF文件也已经生成了,我们开始进入Flexpaper的使用的介绍. 本章中只演示F ...

  7. 一个ioc例子jdk和spring版本导致问题

    今天橘子松在做一个简单例子的时候,出现bug让我久久找了半小时... 天啊 不会吧 错误如下:   java.lang.NoSuchMethodError: org.springframework.a ...

  8. MINA经典入门例子----Time Server

    原文地址 http://blog.sina.com.cn/s/blog_720bdf0501010b8r.html 貌似java的IO.NIO的入门例子都有相关的Time Server Demo.本例 ...

  9. Spring Boot 快速入门

    Spring Boot 快速入门 http://blog.csdn.net/xiaoyu411502/article/details/47864969 今天给大家介绍一下Spring Boot MVC ...

随机推荐

  1. #mxnet# 权值共享

    https://www.cnblogs.com/chenyliang/p/6847744.html Note:后记此权值共享非彼卷积共享.说的是layer实体间的参数共享. Introduction ...

  2. pyqt5界面切换

    #主要的思路就是创建两个frame(如果有两个以上同理)使用setVisible()函数显示或者隐藏frame 参数是bool值import sys from PyQt5.QtWidgets impo ...

  3. Python2的一些问题及解决办法

    1. 无法注释中文的解决办法 # -*- coding:utf8 -*- # 添加这一行就行了 from django.contrib import admin from myapp.models i ...

  4. Markdown语法学习(Github/git.oschina.net上README.md书写规范)(转)

    晚上在更新git.oschina.net项目时,突然想知道README.md后缀的来源,于是搜了下,发现README.md使用了一种小标记语言Markdown的语法,于是简单的看了一个,特转载如下,为 ...

  5. SSL/TLS代理(termination proxy)

    A TLS termination proxy (or SSL termination proxy) is a proxy server that is used by an institution ...

  6. 基于ZooKeeper和Thrift构建动态RPC调用

    一.基本功能 实现服务端向ZooKeeper集群注册自己提供的服务,并且把自己的IP地址和服务端口创建到具体的服务目录下.客户端向ZooKeeper集群监听自己关注的RPC服务(例如:sayHello ...

  7. Ubuntu 部署 nginx

    Ubuntu 部署 nginx  apt-get install nginx

  8. sudo env

    $ sudo echo "Defaults        env_keep=\"PATH PYTHONPATH LD_LIBRARY_PATH CAFFE_ROOT\"& ...

  9. Android之电话拨号和短信

    拨打电话号码,需要添加权限设置,在安装的应用程序信息中可以看到此权限信息Intent doSth=new Intent();//意图:你想做什么呢?doSth.setAction(Intent.ACT ...

  10. Codeforces Round #439 (Div. 2) Problem B (Codeforces 869B)

    Even if the world is full of counterfeits, I still regard it as wonderful. Pile up herbs and incense ...