Spring框架的IOC注入:

一、Java部分代码:

Person实体类:

 package com.ioc;

 import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set; import com.adviceAop.Dancer;
import com.aop.Singer; /**
* Spring 各种类型的注入。
* @Person.java
* @author BlueLake
* @2017-9-12 下午2:11:02
*/
public class Person { //普通类型:字符串类型
private String pname;
//普通类型:字符串类型
private int age;
//集合类型:list
private List<String> loves;
//集合类型:Set
private Set<String> books;
//集合类型:Map
private Map<String,String> heros;
//集合类型:Properties
private Properties palaces;
//引用类型
private Singer singer;
private Dancer dancer; private Emp emp ; //addr不加get、set方法,使用构造器注入。
private String addr; /**
* 无参数构造
*/
public Person() {
super();
} /**
* 参数构造。
* @param addr
*/
public Person(String addr) {
this.addr = addr;
} public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<String> getLoves() {
return loves;
}
public void setLoves(List<String> loves) {
this.loves = loves;
}
public Set<String> getBooks() {
return books;
}
public void setBooks(Set<String> books) {
this.books = books;
} public Map<String, String> getHeros() {
return heros;
} public void setHeros(Map<String, String> heros) {
this.heros = heros;
} public Properties getPalaces() {
return palaces;
} public void setPalaces(Properties palaces) {
this.palaces = palaces;
} public Singer getSinger() {
return singer;
}
public void setSinger(Singer singer) {
this.singer = singer;
}
public Dancer getDancer() {
return dancer;
} public void setDancer(Dancer dancer) {
this.dancer = dancer;
}
public Emp getEmp() {
return emp;
} public void setEmp(Emp emp) {
this.emp = emp;
} @Override
public String toString() {
return "Person [pname=" + pname + ", age=" + age + ", loves=" + loves
+ ", books=" + books + ", heros=" + heros + ", palaces="
+ palaces + ", singer=" + singer + ", dancer=" + dancer
+ ", emp=" + emp + ", addr=" + addr + "]";
}
}

Emp实体类:

 package com.ioc;

 import com.aop.Singer;
/**
* 员工类。
* @Emp.java
* @author BlueLake
* @2017-9-12 下午7:27:33
*/
public class Emp { private String ename;
private int age ;
private Singer singer; public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Singer getSinger() {
return singer;
}
public void setSinger(Singer singer) {
this.singer = singer;
} }

唱歌类:

 package com.aop;
/**
* 唱歌类
* @Singer.java
* @author BlueLake
* @2017-9-12 下午7:28:53
*/
public class Singer { public void sing(){
System.out.println("玖月奇迹--你若盛开~~~");
}
}

跳舞类:

 package com.adviceAop;
/**
* 跳舞类
* @Dancer.java
* @author BlueLake
* @2017-9-12 下午7:29:14
*/
public class Dancer { public void dance(String name){
System.out.println("杨丽萍来跳孔雀舞~~~"+name);
// throw new RuntimeException("受伤了吗?");
}
}

二、配置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"
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/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"> <!-- spring基本注入 ,property的name名称要和类里的名称一致。 -->
<bean id="person" class="com.ioc.Person" autowire="byName">
<!-- 1.构造器注入, 使用constructor-arg标签,必须有这个构造方法 -->
<constructor-arg name="addr">
<value>祖籍钱塘</value>
</constructor-arg>
<!-- 2.set 方法注入 使用 property 标签-->
<property name="pname"> <value>项羽</value> </property>
<property name="age" value="27"> </property>
<property name="loves">
<list>
<value>塞外骑马</value>
<value>江南采莲</value>
<value>剪烛西窗</value>
</list>
</property>
<property name="books">
<set>
<value>小窗幽记</value>
<value>围炉夜话</value>
<value>菜根谭</value>
</set>
</property>
<property name="heros">
<map>
<entry>
<key> <value>曹操</value> </key>
<value>北魏</value>
</entry>
<entry>
<key> <value>赵云</value> </key>
<value>西蜀</value>
</entry>
<entry>
<key> <value>周瑜</value> </key>
<value>东吴</value>
</entry>
</map>
</property>
<property name="palaces">
<props>
<prop key="china">故宫</prop>
<prop key="russia">克里姆林宫</prop>
<prop key="france">卢浮宫</prop>
</props>
</property> <!-- set注入,如果是引用类型,依赖注入 ,使用 ref 标签 -->
<property name="singer" >
<ref bean="singer"/>
</property>
<property name="dancer" ref="dancer"></property>
<!-- 3.自动注入 ,需要写set方法。-->
<!-- emp属性没有配置,会根据bean里的 autowire="byName" 自动注入 -->
</bean>
<!-- 使用p标签注入 ,基本属性直接写入值,依赖属性,指向id -->
<bean id="emp" class="com.ioc.Emp" p:ename="张良" p:age="25" p:singer-ref="singer">
</bean> </beans>

上面少了:<bean id="singer" class="com.aop.Singer"></bean>

    <bean id="dancer" class="com.adviceAop.Dancer" ></bean>

三、测试类

 package com.ioc;

 import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.log4j.LoggerTest;
/**
* 测试注入代码
*/
public class PersonTest { public static void main(String[] args) {
//加载Spring配置文件
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//通过bean的 id和 类型,获取类对象
Person per = ac.getBean("person",Person.class);
System.out.println(per.toString());
//添加日志
// LoggerTest.log.info(per.toString());
/*
* Person [pname=项羽, age=27, loves=[塞外骑马, 江南采莲, 剪烛西窗],
* books=[小窗幽记, 围炉夜话, 菜根谭], heros={曹操=北魏, 赵云=西蜀, 周瑜=东吴},
* palaces={france=卢浮宫, china=故宫, russia=克里姆林宫},
* singer=com.aop.Singer@1367e28, dancer=com.adviceAop.Dancer@143bf3d,
* emp=com.ioc.Emp@c8769b, addr=祖籍钱塘]
*/ //通过bean 的id获取类,再将Object 强转成对应的类型。
Emp emp = (Emp) ac.getBean("emp");
System.out.println(emp.getEname()+"\t"+emp.getAge());//张良 25
} }

Spring注入,Ioc的具体配置的更多相关文章

  1. Spring注入方式及注解配置

    一:基于xml的DI(Dependency Injection) 注入类型: 定义学生Student实体类和小汽车Car实体类:进行封装和生成ToString(),并自定义属性Car Student ...

  2. Spring使用ioc注解方式配置bean

    context层 : 上下文环境/容器环境 applicationContext.xml 具体示例: 现在ioc容器中添加context层支持: 包括添加xmlns:context.xsi:schem ...

  3. Spring操作指南-IoC基础环境配置(基于注解自动装配)

    项目源码:http://code.taobao.org/p/LearningJavaEE/src/LearningSpring001%20-%20Automatically%20wiring%20be ...

  4. Spring操作指南-IoC基础环境配置(基于注解手动装配)

    Source: http://code.taobao.org/p/LearningJavaEE/src/LearningSpring002%20-%20Wiring%20beans%20with%20 ...

  5. Spring操作指南-IoC基础环境配置(基于XML)

  6. spring框架--IOC容器,依赖注入

    思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action  多个   [维护成员变量] service 一个   [不需要维护公共变量] dao     一个   [不需要维护 ...

  7. spring之IOC容器创建对象

    1.术语了解 1.1组件/框架设计 侵入式设计 引入了框架,对现有的类的结构有影响:即需要实现或继承某些特定类. 例如: Struts框架非侵入式设计 引入了框架,对现有的类结构没有影响. 例如:Hi ...

  8. Spring实现Ioc的多种方式--控制反转、依赖注入、xml配置的方式实现IoC、对象作用域

    Spring实现Ioc的多种方式 一.IoC基础 1.1.概念: 1.IoC 控制反转(Inversion of Control) IoC是一种设计思想. 2.DI 依赖注入 依赖注入是实现IoC的一 ...

  9. Spring-初识Spring框架-IOC控制反转(DI依赖注入)

    ---恢复内容开始--- IOC :控制反转 (DI:依赖注入)使用ioc模式开发 实体类必须有无参构造方法1.搭建Spring环境下载jarhttp://maven.springframework. ...

随机推荐

  1. 雇佣K个工人的最小费用 Minimum Cost to Hire K Workers

    2018-10-06 20:17:30 问题描述: 问题求解: 问题规模是10000,已经基本说明是O(nlogn)复杂度的算法,这个复杂度最常见的就是排序算法了,本题确实是使用排序算法来进行进行求解 ...

  2. php中文件操作常用函数有哪些

    php中文件操作常用函数有哪些 一.总结 一句话总结:读写文件函数 判断文件或者目录是否存在函数 创建目录函数 file_exists() mkdir() file_get_content() fil ...

  3. tchart...

    using System;using System.Collections;using System.ComponentModel;using System.Drawing; using System ...

  4. java.lang.RuntimeException: Unable to start activity ComponentInfo……AppCompat does not support the current theme features

    Android测试时出现闪退的问题,出现了如下所示异常: java.lang.RuntimeException: Unable to start activity ComponentInfo{thon ...

  5. WCF服务寄宿IIS与Windows服务 - C#/.NET

    WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的运行 ...

  6. LeetCode--443--压缩字符串(未看)

    问题描述: 给定一组字符,使用原地算法将其压缩. 压缩后的长度必须始终小于或等于原数组长度. 数组的每个元素应该是长度为1 的字符(不是 int 整数类型). 在完成原地修改输入数组后,返回数组的新长 ...

  7. vue动画

    最近想搞搞vue的过渡和动画,以为照着官网写就好了,谁知道还是出现一些状况 具体表现就是不用webpack打包时候写的过渡是正常的,而用了webpack打包就不正常了 说使用了未定义的element: ...

  8. 机器学习ML策略

    1.为什么是ML策略 例如:识别cat分类器的识别率是90%,怎么进一步提高识别率呢? 想法: (1)收集更多数据 (2)收集更多的多样性训练样本 (3)使用梯度下降训练更长时间 (4)尝试Adam代 ...

  9. px em rem 区别

    PX:PX实际上就是像素,用PX设置字体大小时,比较稳定和精确.但是这种方法存在一个问题,当用户在浏览器中浏览我们制作的Web页面时,如果改变了浏览器的缩放,这时会使用我们的Web页面布局被打破.这样 ...

  10. vue.js手机号验证是否正确

    {literal}          var mobile_mode=/^1[34578]\d{9}$/;       {/literal}       if(!mobile_mode.test(te ...