Spring注入,Ioc的具体配置
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的具体配置的更多相关文章
- Spring注入方式及注解配置
一:基于xml的DI(Dependency Injection) 注入类型: 定义学生Student实体类和小汽车Car实体类:进行封装和生成ToString(),并自定义属性Car Student ...
- Spring使用ioc注解方式配置bean
context层 : 上下文环境/容器环境 applicationContext.xml 具体示例: 现在ioc容器中添加context层支持: 包括添加xmlns:context.xsi:schem ...
- Spring操作指南-IoC基础环境配置(基于注解自动装配)
项目源码:http://code.taobao.org/p/LearningJavaEE/src/LearningSpring001%20-%20Automatically%20wiring%20be ...
- Spring操作指南-IoC基础环境配置(基于注解手动装配)
Source: http://code.taobao.org/p/LearningJavaEE/src/LearningSpring002%20-%20Wiring%20beans%20with%20 ...
- Spring操作指南-IoC基础环境配置(基于XML)
- spring框架--IOC容器,依赖注入
思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action 多个 [维护成员变量] service 一个 [不需要维护公共变量] dao 一个 [不需要维护 ...
- spring之IOC容器创建对象
1.术语了解 1.1组件/框架设计 侵入式设计 引入了框架,对现有的类的结构有影响:即需要实现或继承某些特定类. 例如: Struts框架非侵入式设计 引入了框架,对现有的类结构没有影响. 例如:Hi ...
- Spring实现Ioc的多种方式--控制反转、依赖注入、xml配置的方式实现IoC、对象作用域
Spring实现Ioc的多种方式 一.IoC基础 1.1.概念: 1.IoC 控制反转(Inversion of Control) IoC是一种设计思想. 2.DI 依赖注入 依赖注入是实现IoC的一 ...
- Spring-初识Spring框架-IOC控制反转(DI依赖注入)
---恢复内容开始--- IOC :控制反转 (DI:依赖注入)使用ioc模式开发 实体类必须有无参构造方法1.搭建Spring环境下载jarhttp://maven.springframework. ...
随机推荐
- leecode第七十八题(子集)
class Solution { public: vector<vector<int>> subsets(vector<int>& nums) { vect ...
- idataway盐城
地点的经纬度.
- Asp.net core 学习笔记 ( HttpClient )
2018-09-18 core 2.1 之后有新的方案咯 http://www.talkingdotnet.com/3-ways-to-use-httpclientfactory-in-asp-net ...
- 如何模拟一个http请求并把response的内容保存下载下来,导出到excel中(结尾福利)
def doExport(self): # 模拟一个http请求 url = u'%s?dumptype=investigation&dumpid=%s&timezone=8' % ( ...
- 关于类、方法、对象(实例):通过一个例子看一下self都做了哪些事情
我们在定义一个类时,经常会在类的各个方法中看到self,那么在程序执行时self到底起了什么作用,什么时候要加self,这一点需要我们思考并好好理解.之前在学习时没有想这么多,加之用pycharm写代 ...
- 第十章 Call 和 Ret 指令
引言 想想程序之间的加载返回过程. call 和 ret 指令都是转移指令,它们都修改 IP,或同时修改 CS 和 IP. call 和 ret 经常被共同用来实现自程序的设计. 这一章,我们讲解 c ...
- 『TensorFlow』第九弹_图像预处理_不爱红妆爱武装
部分代码单独测试: 这里实践了图像大小调整的代码,值得注意的是格式问题: 输入输出图像时一定要使用uint8编码, 但是数据处理过程中TF会自动把编码方式调整为float32,所以输入时没问题,输出时 ...
- 第二阶段——个人工作总结DAY08
1.昨天做了什么:昨天就时间轴的问题,已经实现了界面的显示. 2.今天打算做什么:打算继续学习<第一行代码>中关于异步任务,多线程,访问网络等后台的知识. 3.遇到的困难:还不太懂具体的步 ...
- activiti部署流程定义时出错:INSERT INTO ACT_GE_BYTEARRAY,修改数据库编码
activiti部署流程定义时出错 // 部署流程定义 Deployment deployment = deploymentBuilder.deploy(); 错误信息:(有乱码的...没留下截图.. ...
- (三)使用链式数据实现包(java)
目标: 1) 描述数据的链式组织方式 2) 描述如何在链式节点链的开头添加新节点 3) 描述如何删除链式节点链的首节点 4) 描述如何在链式节点链中找到某个数据 5) 使用链式节点链实现ADT包 6) ...