注解技术从JDK5.0推出,之后很多框架开始提供注解配置形式。Spring框架从2.5版本开始支持注解配置。注解配置的优点:简单、快捷.

spring可以按照指定的包路径扫描内部组件,当发现组件定义之前有注解,会将该组件纳入spring容器中。 spring常用的6大注解

1.@Controller(控制层)

2.@Repository(DAO层)

3.@Service(业务层组件)

4.@Componet(其他组件)

括号中的为推荐用法,上述4个注解任意用也可以,但不符合规范。

注解只能用在类定义前、方法定义前、成员变量定义前。

在spring中要在xml配置文件开启组件扫描配置

@Repository /*相当于配置了<bean id="jdbcCostDAO" class="org.tarena.dao.JdbcCostDAO"></bean> (可以重命名id标识@Repository("CostDAO")) */

public class JdbcCostDAO implements CostDAO

{ public JdbcCostDAO(){  System.out.println("创建CostDAO对象"); }

@PostConstruct//等价于设置了init-method="方法名"属性 public void myinit(){ System.out.println("初始化CostDAO对象"); }

@PreDestroy//等价于设置了destroy-method="方法名"属性 public void mydestroy(){ System.out.println("销毁CostDAO对象"); }

5.@ Resource //@Resource:用来描述类与类之间依赖的关系

//例如:userServiceImpl依赖userDao

//spring运行会自动根据userServiceImpl依赖的类型

//自动注入userDao的对象

//@Resource根据类型,注入对应的对象,不需要添加set方法

// @Resource @Resource(name=“personDaoBean”)  

private PersonDao  personDao;//用于字段上 注意:如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象时,

@Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。

//该种方法是隐蔽的,也可以显示提供set方法,具体参考: http://blog.sina.com.cn/s/blog_a795a96f01016if1.html

6.@Autowired @Autowired:跟@Resource功能很相似,都是用来维护依赖的关系 @Resource与@Autowired:

@Resource :首先根据名字匹配,然后再根据类型匹配(性能好,企业开发一般都使用)

@Autowired:首先根据类型先匹配,在根据名字

 

回归主题:使用JDK API1.6 java.lang.annotation

1)Target 定义允许何种程序元素可以具有此处定义的注释类型,它的值引用了ElementType的枚举类型,ElementType: package java.lang.annotation; public enum ElementType {  

TYPE,                   // Class, interface, or enum (but not annotation)  
 FIELD,                 // Field (including enumerated values)   
METHOD,               // Method (does not include constructors)   
PARAMETER,           // Method parameter   
CONSTRUCTOR,        // Constructor   
LOCAL_VARIABLE,    // Local variable or catch clause   
ANNOTATION_TYPE,  // Annotation Types (meta-annotations)  
 PACKAGE          // Java package }

2)Retention 定义注释类型的保存方式,值引用了枚举类型RetentionPolicy的值,

package java.lang.annotation; public enum RetentionPolicy {  
SOURCE,       // Annotation is discarded by the compiler  
CLASS,         // Annotation is stored in the class file, but ignored by the VM  
RUNTIME       // Annotation is stored in the class file and read by the VM }
3)Documented: Documented 表示注释应该出现在类的Javadoc中,而默认情况下,注释不包括在 Javadoc 中。

4)Inherited: 表示定义的注释类型将具备继承属性,使用该注释类型的类被继承时,其子类仍具备父类的注释。