注解技术从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: 表示定义的注释类型将具备继承属性,使用该注释类型的类被继承时,其子类仍具备父类的注释。