参看本文前 你要先了解 spring中的 Autowired和Qualifier 注解
如果之前没有接触过 可以查看我的文章
java spring 根据注解方式按(类型/名称)注入Bean
然后 创建一个java项目
引入spring注解方式 所需要的包
然后 在src下创建包 我们这里直接叫 Bean
在Bean下创建包 叫UserData
然后在src下创建 bean.xml 配置文件 参考代码如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="Bean.UserData"></context:component-scan>
</beans>
此时 我们项目就对刚刚创建的UserData开启了注解扫描
然后在UserData下创建一个类 我们这里就叫 User
参考代码如下
package Bean.UserData;
import org.springframework.stereotype.Component;
@Component(value = "User")
public class User {
public String toString(){
return "Umint";
}
}
然后 我们在同目录下 在创建一个类 叫 depart
参考代码如下
package Bean.UserData;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component(value = "depart")
public class depart {
@Resource
private User user;
public void setUser(User user){
this.user = user;
}
public String toString(){
return "user="+this.user;
}
}
这里 我们就用了一个Resource注解 放在这上面 就起到了一个Autowired的作用 根据类型注入对象
那么 我们就会扫描出User 对象类型的类 注入到这里面
我们在src下创建测试类 text 参考代码如下
import Bean.UserData.depart;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class text {
public static void main(String args[]) {
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
depart depart = context.getBean("depart", depart.class);
System.out.println(depart);
}
}
运行结果如下
这里可以看到 我们Resource是可以当Autowired用的
但可能有人说 但他不能配合Qualifier啊
没事啊 配合不了自己上啊
我们改一下depart的代码
改成如下代码
package Bean.UserData;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component(value = "depart")
public class depart {
@Resource(name = "User")
private User user;
public void setUser(User user){
this.user = user;
}
public String toString(){
return "user="+this.user;
}
}
还是能正常执行 这次 Resource 指定name为User 去根据名称再扫描
虽然说Resource挺全面的 但 Autowired和Qualifier 分工更明确 场景适应肯定更强
且 Resource并不是spring官方提供的注解 spring官方肯定还是建议用 spring提供的Autowired和Qualifier