Spring注入,Ioc的具体配置

时间:2023-03-09 06:12:34
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
} }