在一个类中注入俩个不一样实现的超类, 举个例子: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没有用过不清楚具体用法- -