Spring常用的两种依赖注入方式:一种是设值注入方式,利用Bean的setter方法设置Bean的属性值;另一种是构造注入,通过给Bean的构造方法传递参数来实现Bean的属性赋值;

1、设值注入方式

直接上代码例子,示例的树结构图如下

Shape.java接口内容

package chapter3;

public interface Shape {
public double area();//求形状的面积
}

Circle.java内容:

package chapter3;

public class Circle implements Shape {

    double r;
public double getR(){
return this.r;
}
public void setR(double r){
this.r=r;
} @Override
public double area() {
// TODO Auto-generated method stub
return Math.PI*Math.pow(r, );
} }

Rectangle.java内容

package chapter3;

public class Rectangle implements Shape {

    double width,height;

    public double getWidth(){
return this.width;
}
public void setWidth(double width){
this.width=width;
} public double getHeight(){
return this.height;
}
public void setHeight(double height){
this.height=height;
} @Override
public double area() {
// TODO Auto-generated method stub
return width*height;
} }

AnyShape.java内容

package chapter3;

public class AnyShape {
Shape shape;
public void setShape(Shape shape) {this.shape=shape;}
public Shape getShape(){return this.shape;}
public void outputArea(){
System.out.println("面积="+shape.area());
}
}

Test.java内容

package chapter3;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.*; public class Test { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext context=new FileSystemXmlApplicationContext("src/myContext.xml");
AnyShape shape=(AnyShape)context.getBean("anyShape");
shape.outputArea(); AnyShape shape2=(AnyShape)context.getBean("anyShape2");
shape2.outputArea();
} }

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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="myShape" class="chapter3.Circle">
<property name="R">
<value>2.5</value>
</property>
</bean> <bean id="myShape2" class="chapter3.Rectangle">
<property name="height">
<value></value>
</property>
<property name="width">
<value></value>
</property>
</bean> <bean id="anyShape" class="chapter3.AnyShape">
<property name="shape">
<ref bean="myShape"/>
</property>
</bean> <bean id="anyShape2" class="chapter3.AnyShape">
<property name="shape">
<ref bean="myShape2"/>
</property>
</bean> </beans>

在配置文件中,每个Bean的id属性定义Bean的标识。查找和引用Bean是通过该标识进行的。Bean的class属性顶了Bean对应的类和路径名称。通过Bean的子元素property实现属性值的设置,它是通过调用相应属性的setter方法实现属性值的注入。标识为“anyshape”的Bean在设置shape的属性时通过<ref/>标签引用了标识为“myshape”的bean,也就是shape属性由标识为“myshape”的Bean决定的。

Java Spring学习笔记----Bean的依赖注入(设值注入方式)1的更多相关文章

  1. 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展

    <Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...

  2. Spring学习笔记-DI(依赖注入)

    构造器注入(见前贴) Set注入[重点] 依赖注入:Set注入 依赖:bean对象的创建依赖于容器 注入:bean对象的所有属性由容器来注入 [环境搭建] 复杂类型 // Class Address ...

  3. [跟我学spring学习笔记][DI循环依赖]

    循环依赖 什么是循环依赖? 循环依赖就是循环引用,就是两个或多个Bean相互之间的持有对方. Spring容器循环依赖包括构造器循环依赖和setter循环依赖,那Spring容器如何解决循环依赖呢? ...

  4. Spring 学习笔记 Bean的作用域

    在配置文件中定义Bean时,用户不但可以配置Bean的属性值以及相互之间的依赖关系,还可以定义Bean的作用域.作用域将对Bean的生命周期和创建方式产生影响.在低版本的Spring中,仅有两个作用域 ...

  5. Spring学习笔记-Bean

    Bean作用域(Bean Scope) singleton[单例模式][默认]:全局唯一 <!--显式设置单例模式--> <bean id="accountService& ...

  6. Spring 学习笔记---Bean的生命周期

    生命周期图解 由于Bean的生命周期经历的阶段比较多,我们将通过一个图形化的方式进行描述.下图描述了BeanFactory中Bean生命周期的完整过程: Bean 的生命周期从Spring容器着手实例 ...

  7. Android(java)学习笔记213:开源框架post和get方式提交数据(qq登录案例)

    1.前面提到Http的get/post方式  . HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的 2.Android应用会经常使用http协议进行传输,网上会有很完善 ...

  8. Android(java)学习笔记156:开源框架post和get方式提交数据(qq登录案例)

    1. 前面提到Http的get/post方式  . HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的 2. Android应用会经常使用http协议进行传输,网上会有很 ...

  9. Android(java)学习笔记191:Android数据存储5种方式总结

    1.使用文件(File)存储 存储一般的数据 2.使用sharedperference(xml) 存储设置信息.配置信息.密码 3.数据库Sqlite 开源的,嵌入式的数据库,轻量级 4.使用Cont ...

随机推荐

  1. Android .9 图片

    最初对 .9 图片不是十分理解,一些教程让人摸不到头脑. 最近重新研究终于明白了它的原理. 其实最重要的一点记住就可以了,就是 .9 图片的四条黑边的意义,每条黑边的意义都不一样: 顶部:在水平拉伸的 ...

  2. 564. Find the Closest Palindrome

    Given an integer n, find the closest integer (not including itself), which is a palindrome. The 'clo ...

  3. C++ 设置Java 环境变量完整的例子

    #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <iostream& ...

  4. spring cloud学习(四) 动态路由

    Zuul的主要功能是路由和过滤器.路由功能是微服务的一部分,zuul实现了负载均衡. 1.1 新建模块zuul pom.xml <?xml version="1.0" enc ...

  5. 教你通过Node.js漏洞完成渗透测试

    本篇文章较为详细的讲述了通过node.js的已知漏洞来完成渗透测试的过程,介绍了node.js存在的漏洞可以在多种工具下的不同利用方式.因为我认为会对论坛部分web安全新手有所帮助,所以整理到论坛中. ...

  6. cStringIO 实现指定大小的字符串缓存

    StringIO经常被用来作为字符串的缓存,以下实现无论写入多少字符串,总能返回一个指定大小的缓存 from cStringIO import StringIO class CustomStringI ...

  7. vue10行代码实现上拉翻页加载更多数据,纯手写js实现下拉刷新上拉翻页不引用任何第三方插件

    vue10行代码实现上拉翻页加载更多数据,纯手写js实现下拉刷新上拉翻页不引用任何第三方插件/库 一提到移动端的下拉刷新上拉翻页,你可能就会想到iScroll插件,没错iScroll是一个高性能,资源 ...

  8. dockerfile简述

    作用 Dockerfile的内容是一坨可以执行的代码(或者说是指令)(docker的DSL),这些代码使得创建镜像的操作可以复用以及自动化. 指令格式 Dockerfile的指令格式很简单: INST ...

  9. Log4j最佳实践

    本文是结合项目中使用Log4j总结的最佳实践,非转载.网上可以找到的是这一篇<Log4j最佳实践>.本来Log4j使用是非常简单的,无需多介绍其用法,这只是在小型项目中:但在大型的项目中使 ...

  10. Android学习总结——DrawerLayout 侧滑栏点击事件穿透

    使用DrawerLayout实现侧滑栏功能时,点击侧滑栏空白处时,主界面会获得事件. 解决方法:侧滑栏布局添加 android:clickable="true"