同一個實體的不一樣註解方式

  在一個類中注入倆個不一樣實現的超類, 舉個例子: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沒有用過不清楚具體用法- -

相關文章
相關標籤/搜索