基于注解的DI

上一回说到IoC的基于xml配置方法的注入,现在来聊一下基于注解的注入。。


也是用上一回那两个类:Student  School。

使用注解会显得比配置简单好多,仅仅需要几个注解就搞定了,比如下面的:

School

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component("mySchool")  //表示当前类被spring所管理
public class School {
	@Value("001")
	private String sid;//学校编号
	
	@Value("蓝鸟")
	private String sname;//学校校名
	public School(){
		
	}
	//带参的构造方法,将两个属性作为参数传进来
	public School(String sid, String sname) {
		this.sid = sid;
		this.sname = sname;
	}
	
	
	public void setSid(String sid) {
		this.sid = sid;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public String getSid() {
		return sid;
	}
	public String getSname() {
		return sname;
	}
	
	@Override
	public String toString() {
		return "School [sid=" + sid + ", sname=" + sname + "]";
	}
	
}

Student

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component("myStudent")  //表示当前类被spring所管理
public class Student {
	@Value("小花")
	private String name;//  学生姓名
       @Autowired //byName方式自动注入
	private School school;//学生所读学校
	
	public Student(){
		
	}
	//带参的构造方法
	public Student(String name, School school) {
		super();
		this.name = name;
		this.school = school;
	}


	public void setName(String name) {
		this.name = name;
	}
	public void setSchool(School school) {
		this.school = school;
	}
	public String getName() {
		return name;
	}
	
	public School getSchool() {
		return school;
	}
	
	@Override
	public String toString() {
		return "Student [name=" + name + ", school=" + school + "]";
	}
}

可见,使用注解只需要先在类的上面给个 @Component  注解 这样就等于跟spring说:“嘿!大哥,我这个需要你管理哦~”  然后在属性上面也给了 @Value 注解,并给出要注入的即可。。

当然,只在类上操作还不行,还需要在配置文件中给出配置,毕竟容器都是读配置文件的,这个配置也超级简单,只需要一个叫  组件扫描器的东西就可以了,不过这个扫描器是context标签的,所以要在配置文件中引入context约束。


配置如下所示:


<context:component-scan base-package="com.czp.ioc_di" />
是的,这样就可以了,其中 base-package 给出包路劲就行了,这个组件扫描器就会扫描给出的包中的bean。


需要注意的是,如果域属性要用byType方式的自动注入,要这样配置

	@Autowired  
	@Qualifier("mySchool")//byType自动注入
	private School school;//学生所读学校
	

就是说不能缺少前面那个 @Autowired 注解,可以这样理解:这个注解只是声明了自动注入,而且默认是byName方式,如果想要用byType就要再配置一个注解。  

















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值