1,提供构造函数来让spring实现构造注入
public class PersonService {
private String name;
//提供bean的构造函数,让spring用构造注入的方式来构造cibean
public PersonService(String name) {
this.name = name;
}
public void info(){
System.out.println("此人的名字为:" + name);
}
}
2,提供setter函数来让spring实现setter注入
package com.supan.spring;
public interface Person {
public void useAxe();
}
package com.supan.spring;
public interface Axe {
public String chop();
}
package com.supan.spring;
public class StoneAxe implements Axe {
public String chop() {
return "石斧砍柴好慢";
}
}
package com.supan.spring;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
[color=red]//实现ApplicationContextAware接口让该bean持有了容器的引用。[/color]
public class Chinese implements Person,ApplicationContextAware {
private ApplicationContext atx;
private Axe axe;
public Axe getAxe() {
return axe;
}
public void setAxe(Axe axe) {
this.axe = axe;
}
public void useAxe() {
System.out.println(axe.chop());
}
@Override
public void setApplicationContext(ApplicationContext atx)
throws BeansException {
this.atx = atx;
}
public ApplicationContext getContext(){
return atx;
}
}
3,spring配置文件
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<bean id="personService" class="PersonService">
<!-- 采用构造注入的方式 -->
<constructor-arg index="0" value="chenchaoyang"></constructor-arg>
</bean>
<bean id="chinese" class="com.supan.spring.Chinese">
<!-- 采用setter注入的方式 -->
<property name="axe" ref="stoneAxe"></property>
</bean>
<bean id="stoneAxe" class="com.supan.spring.StoneAxe"></bean>
</beans>
3,测试类;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.supan.spring.Person;
public class SpringTest {
public static void main(String[] args) {
//创建spring的ApplicationContext
ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");
PersonService p =
ctx.getBean("personService",PersonService.class);
p.info();
System.out.println(p2.getContext() == ctx);
Chinese p2 = ctx.getBean("chinese",Chinese.class);
p2.useAxe();
System.out.println(ctx);
}
}
4,结果:
此人的名字为:chenchaoyang
石斧砍柴好慢