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