引用类型@Resource
@Resource 来自JDK中的注解,spring框架提供了对这个注解的功能支持,可以使用它给引用类型赋值
使用的也是自动注入原理,支持byName,byType,默认是byName
位置:1.在属性定义的上面,无需set方法,推荐使用。
2.在set方法的上面
package com.example.ba06; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.Resource; @Component("myStudent") public class Student { @Value(value = "张飞") private String name; @Value(value = "27") private Integer age; /*引用类型 * @Resource 来自JDK中的注解,spring框架提供了对这个注解的功能支持,可以使用它给引用类型赋值 * 使用的也是自动注入原理,支持byName,byType,默认是byName * 位置:1.在属性定义的上面,无需set方法,推荐使用。 * 2.在set方法的上面 * */ //默认是byName:先使用byName自动注入,如果byName赋值失败,再使用byType @Resource private School school; public void setName(String name) { this.name = name; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", school=" + school + '}'; } }
学校类:
package com.example.ba06; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component("mySchool") public class School { @Value(value = "白皮大学") private String name; @Value(value = "广州") private String address; public void setName(String name) { this.name = name; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "School{" + "name='" + name + '\'' + ", address='" + address + '\'' + '}'; } }
运行结果:
上面代码可以看到,默认是byName,学校类中并没有声明的名称,程序也可以正常运行且输出正确结果,原因是:先使用byName自动注入,如果byName赋值失败,再使用byType
若要使用byName方法,只需要在@Resource后面加入(name=“mySchool”)