Spring的控制反转(依赖注入),及两种注入方式

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
石斧砍柴好慢
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值