Spring的@Resource注解及原理
2016-03-27 22:41
549 查看
package cn.xhx.spring.di.annotation.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.xhx.spring.di.annotation.Person; public class AnnotationTest { /** * 原理 * 1、当启动spring容器时,创建两个对象(student,person) * 2、当spring容器解析到 * <context:annotation-config></context:annotation-config> * spring容器会在spring容器管理的bean的范围内查找这些类的属性上面是否加了@Resource注解 * 3、spring解析@Resource注解的name属性 * 如果name属性为"" * 说明该注解根本没有写name属性 * spring容器会得到该注解所在的属性的名称和spring容器中的id相匹配,如果匹配成功,则赋值 * 如果匹配不成功,则按照类型进行匹配 * 还不成功,报错! * 如果name属性不为"" * 则按照name属性的值和spring容器中的id做匹配,如果匹配成功,则赋值,不成功,则报错! * 说明: * 注解只能作用于引用类型 * 注解写法比较简单,但是效率比较低 * xml写法比较复杂,但是效率比较高 */ @Test public void AnnotationTest () { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); Person person = (Person)applicationContext.getBean("person"); person.getStudent().say();//输出"student say" } }
package cn.xhx.spring.di.annotation; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; import javax.annotation.Resource; public class Person { private String name; @Resource(name="student") /** * @Autowired //按照类型进行匹配 * @Qualifier("student") //按照id进行匹配 * @Resource是java扩展包下的,spring为了不使用java的注解,编写了@Autowired和@Qualifier,其2个的作用相加等于@Resource */ private Student student; public String getName() { return name; } public void setName(String name) { this.name = name; } public Student getStudent() { return student; }}
package cn.xhx.spring.di.annotation; public class Student{ public void say() { System.out.println("student say"); } }
<?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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <bean id="student" class="cn.xhx.spring.di.annotation.Student"></bean> <bean id="person" class="cn.xhx.spring.di.annotation.Person"></bean> <context:annotation-config></context:annotation-config> </beans>
相关文章推荐
- 20145213《Java程序设计》第四周学习总结
- 20145334赵文豪 《Java程序设计》第4周学习总结
- jmeter java sampler测试java接口(二)测试自己的代码
- 共同学习Java源码--concurrent包黑科技--Executor和ExecutorService
- Eclipse 使用 SVN 插件后修改用户方法汇总
- 说说Java中的代理模式
- Map对象与JavaBean互转,List<Map>与List<JavaBean>互转等
- maven--初见
- 20145222黄亚奇《Java程序设计》第4周学习总结
- 20145239杜文超 《Java程序设计》第4周学习总结
- 正式开始重新学习java
- JAVA第二次作业
- Spring配置文件写法
- 如何解决Android在eclipse中项目同时使用viewpagerindicator,slidingmenu开源框架时项目报错的问题
- 几句话弄清楚Java参数传值还是传引用
- 20145206邹京儒《Java程序设计》第4周学习总结
- java int与integer的区别
- spring mvc 小结-51cto学院Spring MVC
- Java两个线程交替打印(实现Runnable接口)
- JAVAEE 框架 2016-3-27