同一个实体的不一样注解方式

  在一个类中注入俩个不一样实现的超类, 举个例子:java

如今有个超类Man 它有子类techear 和 student , 而如今又有各种Room 里面注入了俩个Man类, 其中一个Man的实例是Student,另外一个Man的实例是teacher 。 而注解方式怎么去区分这俩个Man的不一样实例呢?  先看一下代码:spring

Man类 :框架

package com.younchen.model;

public abstract class Man {
	private String name;
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public abstract String introduce();
	
}

teacher类:ide

package com.younchen.model;

import javax.inject.Named;

@Named("teacher")
public class Teacher extends Man{

	@Override
	public String introduce() {
		// TODO Auto-generated method stub
		return "I'm teacher";
	}
}


student类:
测试

package com.younchen.model;

import javax.inject.Named;

@Named("student")
public class Student extends Man{

	@Override
	public String introduce() {
		// TODO Auto-generated method stub
		return "I'm student";
	}
}

room类:this

package com.younchen.model;
import javax.inject.Inject;
import javax.inject.Named;

@Named("room")
public class Room {

	 @Inject @Named("student") private Man student;
	 @Inject @Named("teacher") private Man teacher;
	 
	 
	 public Man getStudent(){
		 return student;
	 }
	 
	 public Man getTeacher(){
		 return teacher;
	 }
	 
}

测试类:spa

package com.younchen.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.util.Assert;

import com.younchen.model.Room;
import com.younchen.model.Student;
import com.younchen.util.SpringUtil;

public class DITest {

	
	public static void main(String[] args){
		
		ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
		
		
		Room room = (Room)context.getBean("room");
		Assert.notNull(room);
		
		System.out.println(room.getStudent().introduce());
		System.out.println(room.getTeacher().introduce());
		
	}
	
}

运行结果:code

I'm student
I'm teacher

对于一个对象的不一样实例可使用@Inject+ @Named方式去实现。xml


注:对象

@Inject是 java中标准化的DI中的一个,在IOC框架中用于注入对象

@Named 是特殊的@Qualifier (这也是和@Injecct同样同属于标准化DI,用于限定标识)

另外的标准化注解有@Singleton和 @Scope注解

@Singleton注解表示被注入的对象是单例类

@Scope没有用过不清楚具体用法- -

相关文章
相关标签/搜索