注解@Resource, 根据byName赋值,找不到. 就会根据byType再找一次,赋值
@Resource和@Autowired的区别: @Autowired来自spring框架, 而 @Resource来自jdk.
package com.atChina.Test6;
import javax.annotation.Resource;
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 org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
/*
* @Component: 创建对象,默认创建的是单例对象
* 属性: value,表示对象的id
* 位置: 在类的上面,表示创建该类的对象
* @Component(value="myStudent")等同于<bean id="myStudent" class="com.atChina.Test.Student" />
*
*/
@Component("student")
public class Student {
@Value("宋江")
private String name;
private int age;
/*
* 引用类型,使用框架的自动注入:
* @Resource:来自jdk中的注释,给引用类型赋值,支持byName,byType. 默认是byName
* 位置:1)在属性定义的上面,推荐使用,无需set方法
* 2)在set方法的上面
*/
@Resource // 如果根据byName赋值,找不到. 就会根据byType再找一次,赋值
private School school;
public void setName(String name) {
System.out.println("setName:"+name);
this.name = name;
}
@Value("23")
public void setAge(int age) {
System.out.println("setAge:"+age);
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", school=" + school
+ "]";
}
}
Student类中有一个School属性.
package com.atChina.Test6;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("sch")
public class School {
@Value("海洋大学")
private String name;
@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 + "]";
}
}
注解@Resource, 只按byName赋值
package com.atChina.Test7;
import javax.annotation.Resource;
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 org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
/*
* @Component: 创建对象,默认创建的是单例对象
* 属性: value,表示对象的id
* 位置: 在类的上面,表示创建该类的对象
* @Component(value="myStudent")等同于<bean id="myStudent" class="com.atChina.Test.Student" />
*
*/
@Component("student")
public class Student {
@Value("宋江")
private String name;
private int age;
/*
* 引用类型,使用框架的自动注入:
* @Resource:来自jdk中的注释,给引用类型赋值,支持byName,byType. 默认是byName
* 位置:1)在属性定义的上面,推荐使用,无需set方法
* 2)在set方法的上面
*/
@Resource(name="sch") // 只按byName,需要指定@Resource的name属性,name指定bean对象的名称
private School school;
public void setName(String name) {
System.out.println("setName:"+name);
this.name = name;
}
@Value("23")
public void setAge(int age) {
System.out.println("setAge:"+age);
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", school=" + school
+ "]";
}
}