1.代码结构图

xxx

2.bean代码

package com.xxx.bean;

/**
* Created with IntelliJ IDEA.
* User: zhenwei.liu
* Date: 13-7-18
* Time: 上午1:25
* To change this template use File | Settings | File Templates.
*/
public abstract class People {
protected String name;
protected int age;
protected Pet pet; public abstract String speak(); @Override
public String toString() {
return "I am " + name + ", I'm " + age +
" years old. And I have a pet named " + pet.getName();
} 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 Pet getPet() {
return pet;
} public void setPet(Pet pet) {
this.pet = pet;
}
} package com.xxx.bean; /**
* Created with IntelliJ IDEA.
* User: zhenwei.liu
* Date: 13-7-18
* Time: 上午1:28
* To change this template use File | Settings | File Templates.
*/
public class Chinese extends People {
public Chinese(String name, int age, Pet pet) {
this.name = name;
this.age = age;
this.pet = pet;
} public Chinese() {
} @Override
public String speak() {
return "I can speak Chinese";
}
} package com.xxx.bean; import java.util.List; /**
* Created with IntelliJ IDEA.
* User: zhenwei.liu
* Date: 13-7-18
* Time: 上午2:14
* To change this template use File | Settings | File Templates.
*/
public class American extends People {
private List<Pet> petList; @Override
public String speak() {
return "I can speak English!";
} public List<Pet> getPetList() {
return petList;
} public void setPetList(List<Pet> petList) {
this.petList = petList;
}
} package com.xxx.bean; /**
* Created with IntelliJ IDEA.
* User: zhenwei.liu
* Date: 13-7-18
* Time: 上午1:26
* To change this template use File | Settings | File Templates.
*/
public abstract class Pet {
protected String name;
public abstract String bark(); @Override
public String toString() {
return "My name is " + name;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
} package com.xxx.bean; /**
* Created with IntelliJ IDEA.
* User: zhenwei.liu
* Date: 13-7-18
* Time: 上午1:28
* To change this template use File | Settings | File Templates.
*/
public class Dog extends Pet {
public Dog() {
} public Dog(String name) {
this.name = name;
} @Override
public String bark() {
return "Wang wang";
}
} package com.xxx.bean; /**
* Created with IntelliJ IDEA.
* User: zhenwei.liu
* Date: 13-7-18
* Time: 上午1:29
* To change this template use File | Settings | File Templates.
*/
public class Cat extends Pet {
public Cat() {
} @Override
public String bark() {
return "miao";
}
}

3.applicationContext.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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 构造方法注入示例 -->
<!-- scope参数表示bean的作用域,如下 -->
<!-- singleton,默认值,一个bean只有一个实例 -->
<!-- prototype,每次调用创建一个实例 -->
<!-- request,每次http请求对应一个实例,仅在Spring MVC上下文有效 -->
<!-- session,每个session对应一个实例,仅在Spring MVC上下文有效 -->
<!-- global-session,每个全局session对应一个实例,尽在Portlet上下文有效 -->
<bean id="chineseA" class="com.xxx.bean.Chinese" scope="prototype">
<constructor-arg value="Li Lei"/>
<constructor-arg value="15"/>
<constructor-arg ref="dogA"/>
</bean> <bean id="dogA" class="com.xxx.bean.Dog">
<constructor-arg value="Bobby"/>
</bean> <!-- 工厂方法注入示例 -->
<!-- 如果bena的类型是一个单例模式类 -->
<!-- 那么注入这个类的方法则是使用其工厂方法生成实例 -->
<!--<bean id="staticClass" -->
<!--class="com.xxx.bean.StaticClass"-->
<!--factory-method="getInstance" />--> <!-- 属性注入示例 -->
<!-- 使用p前缀,直接引入属性或属性引用 -->
<bean id="chineseB" class="com.xxx.bean.Chinese" scope="prototype"
p:pet-ref="catA">
<property name="name" value="Han Meimei" />
<property name="age" value="18" />
<!--<property name="pet" ref="catA" />-->
</bean> <bean id="catA" class="com.xxx.bean.Cat"
p:name="Kitty" /> <!-- 集合注入示例 -->
<!-- 集合注入包括List,Set,Map,Properties -->
<!-- 此处以List为例子,其他不详写 -->
<bean id="americanA" class="com.xxx.bean.American" scope="prototype">
<property name="name" value="Michael Johnson" />
<property name="age" value="28" />
<property name="pet" ref="dogB" />
<property name="petList">
<list>
<ref bean="dogA" />
<ref bean="catA" />
</list>
</property>
</bean> <bean id="dogB" class="com.xxx.bean.Dog"
p:name="Cookie" />
</beans>

4.测试代码及结果

package com.xxx.bean;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* Created with IntelliJ IDEA.
* User: zhenwei.liu
* Date: 13-7-18
* Time: 上午1:51
* To change this template use File | Settings | File Templates.
*/
public class ConstructInjectTest {
/**
* Spring的3种应用上下文介绍
* ClassPathXmlApplicationContext-从运行时加载类路径下读取XML配置
* FileSystemXmlApplicationContext-从文件系统读取XML配置文件(绝对路径)
* XmlWebApplicationContext-从Web应用下读取XML配置文件
*/
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
People chinese = (People) ctx.getBean("chineseA");
Pet dog = chinese.getPet();
System.out.println(chinese);
System.out.println(chinese.speak());
System.out.println(dog);
System.out.println(dog.bark());
}
}

I am Li Lei, I'm 15 years old. And I have a pet named Bobby
I can speak Chinese
My name is Bobby
Wang wang

package com.xxx.bean;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* Created with IntelliJ IDEA.
* User: zhenwei.liu
* Date: 13-7-18
* Time: 上午2:13
* To change this template use File | Settings | File Templates.
*/
public class PropInjectTest {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
People chinese = (People) ctx.getBean("chineseB");
Pet dog = chinese.getPet();
System.out.println(chinese);
System.out.println(chinese.speak());
System.out.println(dog);
System.out.println(dog.bark());
}
}

I am Han Meimei, I'm 18 years old. And I have a pet named Kitty
I can speak Chinese
My name is Kitty
miao

package com.xxx.bean;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* Created with IntelliJ IDEA.
* User: zhenwei.liu
* Date: 13-7-18
* Time: 上午2:23
* To change this template use File | Settings | File Templates.
*/
public class CollectionInjectTest {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
American american = (American) ctx.getBean("americanA");
Pet dog = american.getPet();
System.out.println(american);
System.out.println(american.speak());
System.out.println(dog);
System.out.println(dog.bark());
System.out.println(american.getPetList());
}
}

I am Michael Johnson, I'm 28 years old. And I have a pet named Cookie
I can speak English!
My name is Cookie
Wang wang
[My name is Bobby, My name is Kitty]

自动装配配置

    <!-- 自动装配示例 -->
<!-- autowire属性表示自动装配bean中的所有属性,也可以和手动装配混合使用 -->
<!-- byName表示装配属性名与bean id相同的bean -->
<!-- byType表示装配类型与bean class类型相同的bean -->
<!-- constructor表示按照构造方法装配,装配规则与byType相同 -->
<!-- autodetect表示先使用constructor装配,如果没有与构造方法匹配的参数,在使用byType装配 -->
<!-- 当使用byType有多个符合条件的bean时,可以设置primary=true,表示有多个符合条件bean时使用此bean -->
<!-- 如果不想让某个bean成被装配,可以设置autowire-candidate=false -->
<bean id="autoChinese" class="com.xxx.bean.Chinese"
autowire="byName" >
<property name="name" value="#{chineseA.name}" />
</bean> <!-- 可以在 beans 标签中配置全局自动装配 default-autowire="byType" -->

Spring Bean 注入 1 - 构造方法注入,属性注入,自动装配的更多相关文章

  1. Spring 学习笔记(五)—— Bean之间的关系、作用域、自动装配

    继承 Spring提供了配置信息的继承机制,可以通过为<bean>元素指定parent值重用已有的<bean>元素的配置信息. <?xml version="1 ...

  2. spring的基于XML方式的属性注入

    1.掌握spring的属性注入的方法: 1.1构造方法注入普通值---------<constructor-arg>标签的使用 首先新建一个类 package spring.day1.de ...

  3. Spring(3.2.3) - Beans(2): 属性注入 & 构造注入

    依赖注入是指程序运行过程中们如果需要另外的对象协作(访问它的属性或调用它的方法)时,无须在代码中创建被调用者,而是依赖于外部容器的注入. 属性注入(Setter Injection) 属性注入是指 I ...

  4. Spring - bean的autowire属性(自动装配)

    当我们要往一个bean的某个属性里注入另外一个bean,我们会使用<property> + <ref/>标签的形式.但是对于大型项目,假设有一个bean A被多个bean引用注 ...

  5. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring Bean的配置及常用属性

    作为 Spring 核心机制的依赖注入,改变了传统的编程习惯,对组件的实例化不再由应用程序完成,转而交由 Spring 容器完成,在需要时注入应用程序中,从而对组件之间依赖关系进行了解耦.这一切都离不 ...

  6. Spring笔记(2) - 生命周期/属性赋值/自动装配及部分源码解析

    一.生命周期 @Bean自定义初始化和销毁方法 //====xml方式: init-method和destroy-method==== <bean id="person" c ...

  7. 基于注解整合struts2与spring的时候如果不引入struts2-spring-plugin包自动装配无效

    基于注解整合struts2与spring的时候如果不引入struts2-spring-plugin包,自动装配将无效,需要spring注入的对象使用时将抛出空指针异常(NullPointerExcep ...

  8. Spring框架xml配置文件 复杂类型属性注入——数组 list map properties DI dependency injection 依赖注入——属性值的注入依赖于建立的对象(堆空间)

    Person类中的各种属性写法如下: package com.swift.person; import java.util.Arrays; import java.util.List; import ...

  9. spring框架对于实体类复杂属性注入xml文件的配置

    spring框架是javaWeb项目中至关重要的一个框架,大多web 项目在工作层次上分为持久层.服务层.控制层.持久层(dao.mapper)用于连接数据库,完成项目与数据库中数据的传递:服务层(s ...

  10. 六 Spring属性注入的四种方式:set方法、构造方法、P名称空间、SPEL表达式

    Spring的属性注入: 构造方法的属性注入 set方法的属性注入

随机推荐

  1. 洛谷P1438 无聊的数列 [zkw线段树]

    题目传送门 无聊的数列 题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i]} ...

  2. Spring框架中ModelAndView、Model、ModelMap区别 (转)

    原文地址:http://www.cnblogs.com/google4y/p/3421017.html SPRING框架中ModelAndView.Model.ModelMap区别   注意:如果方法 ...

  3. 深度学习应用系列(四)| 使用 TFLite Android构建自己的图像识别App

    深度学习要想落地实践,一个少不了的路径即是朝着智能终端.嵌入式设备等方向发展.但终端设备没有GPU服务器那样的强大性能,那如何使得终端设备应用上深度学习呢? 所幸谷歌已经推出了TFMobile,去年又 ...

  4. Good Bye 2017 部分题解

    D. New Year and Arbitrary Arrangement 分析 \(dp[i][j]\) 表示已有 \(i\) 个 \(a\) 和 \(j\) 个 \(ab\) 的情况下继续构造能得 ...

  5. 火焰图&perf命令

    最近恶补后端技术,发现还是很多不懂,一直写业务逻辑容易迷失,也没有成长.自己做系统,也习惯用自己已知的知识来解决,以后应该多点调研,学到更多的东西应用起来. 先学一个新的性能分析命令. NAME pe ...

  6. bash shell 关系

    linux的bash和shell关系 shell通俗理解:把用户输入的命令翻译给操作系统. shell 是一个交互性命令解释器.shell独立于操作系统,这种设计让用户可以灵活选择适合自己的shell ...

  7. Hibernate 基于外键的单项一对一关联映射

    在开发过程中很多时候会用到表与表之间一对一的关联关系,本文简单介绍在Hibernate4中单项一对一的关联映射. 1.设计表结构 2.创建Person对象 3.创建IdCard对象 4.写hbm.xm ...

  8. JZYZOJ1525 HAOI2012道路 堆优化的dijkstra+pair

    From Tyvj Guest ☆[haoi2012]道路                 描述 Description     C国有n座城市,城市之间通过m条单向道路连接.一条路径被称为最短路,当 ...

  9. [ARC053D]2 つの山札

    题意:给定排列$a_{1\cdots n},b_{1\cdots n}$,执行以下操作$2n-2$次来生成一个长度为$2n-2$的序列:选择$a,b$之一(选择的序列长度要$\geq2$),删除它的第 ...

  10. hdu 2709 递推

    题意:给出一个数,把他拆成2^n和的形式,问有多少种拆法 链接:点我 对6进行分析 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 1 1 4 2 2 4 2 4 对最上面4个,显然是由4 ...