Spring 一二事(7) - annotation

之前的文章大多都是一带而过,一方面比较简单,一方面不是用的注解形式

在企业开发中,主要还是使用的注解来进行开发的

1   <!-- 
2            component:把一个类放入到spring容器中,该类就是一个component
3            在base-package指定的包及子包下扫描所有的类
4     -->
5     <context:component-scan base-package="com.lee.spring011.scan"></context:component-scan>

 

主要还是用 @Resource,另外2个不常用

 1 package com.lee.spring010.DI.annotation;
 2 
 3 import javax.annotation.Resource;
 4 
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.beans.factory.annotation.Qualifier;
 7 
 8 public class Person {
 9     
10     @Resource
11 //    @Resource(name="studentA")
12 //    @Autowired 纯粹按照类型进行匹配
13 //    @Qualifier("studentA")
14     private Student studentA;
15 
16 //    public Student getStudentA() {
17 //        return studentA;
18 //    }
19     
20     public void tell() {
21         studentA.sayHello();
22     }
23 
24     
25 }
1 package com.lee.spring010.DI.annotation;
2 
3 public class Student {
4     
5     public void sayHello() {
6         System.out.println("Hello! I am a student...nathan!");
7     }
8 
9 }

测试:

 1 package com.lee.spring010.DI.annotation;
 2 
 3 import org.junit.Test;
 4 import org.springframework.context.ApplicationContext;
 5 import org.springframework.context.support.ClassPathXmlApplicationContext;
 6 
 7 public class AnnotationTest {
 8 
 9     /**
10      * 原理
11      *    1、当启动spring容器的时候,创建两个对象
12      *    2、当spring容器解析到
13      *             <context:annotation-config></context:annotation-config>
14      *        spring容器会在spring容器管理的bean的范围内查找这些类的属性上面是否加了@Resource注解
15      *    3、spring解析@Resource注解的name属性
16      *            如果name属性为""
17      *              说明该注解根本没有写name属性
18      *              spring容器会得到该注解所在的属性的名称和spring容器中的id做匹配,如果匹配成功,则赋值
19      *                                                               如果匹配不成功,则按照类型进行匹配
20      *          如果name属性的值不为""
21      *               则按照name属性的值和spring的id做匹配,如果匹配成功,则赋值,不成功,则报错
22      *   说明:
23      *       注解只能用于引用类型
24      *       注解写法比较简单,但是效率比较低
25      *       xml写法比较复杂,但是效率比较高
26      */
27     @Test
28     public void testPerson() {
29         ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
30         Person personA = (Person)context.getBean("personA");
31 //        personA.getStudentA().sayHello();
32         personA.tell();
33     }
34 
35 }

 

github地址:https://github.com/leechenxiang/maven-spring001-helloworld

 

posted @ 2016-03-22 11:49  风间影月  阅读(459)  评论(2编辑  收藏  举报