注解
来源:互联网 发布:网络出版的类型 编辑:程序博客网 时间:2024/06/14 18:18
</pre><pre class="html" name="code">1. 什么是注解 语法:@注解名称 注解的作用:替代xml配置文件! servlet3.0中,就可以不再使用web.xml文件,而是所有配置都使用注解! 注解是由框架来读取使用的!2. 注解的使用 * 定义注解类:框架的工作 * 使用注解:我们的工作 * 读取注解(反射):框架的工作3. 定义注解类 class A {} interface A{} enum A{} @interface A{}//天下所有的注解都是Annotation的子类!4. 使用注解 注解的作用目标: * 类 * 方法 * 构造器 * 参数 * 局部变量 * 包5. 注解的属性 * 定义属性: > 格式: @interface MyAnno1 {int age();String name(); } * 使用注解时给属性赋值 > @MyAnno1(age=100, name="zhangSan") * 注解属性的默认值:在定义注解时,可以给注解指定默认值! > int age() default 100; > 在使用注解时,可以不给带有默认值的属性赋值! * 名为value的属性的特权 > 当使用注解时,如果只给名为value的属性赋值时,可以省略“value=”,例如: @MyAnno1(value="hello"),可以书写成 @MyAnno1("hello") * 注解属性的类型 > 8种基本类型 > String > Enum > Class > 注解类型 > 以上类型的一维数组类型 当给数组类型的属性赋值时,若数组元素的个数为1时,可以省略大括号@MyAnno1(a=100,b="hello",c=MyEnum1.A,d=String.class,e=@MyAnno2(aa=200, bb="world"),f=100)public class Demo3 {}@interface MyAnno1 {int a();String b();MyEnum1 c();Class d();MyAnno2 e();int[] f();}6. 注解的作用目标限定以及保存策略限定 6.1 让一个注解,它的作用目标只能在类上,不能在方法上,这就叫作用目标的限定! * 在定义注解时,给注解添加注解,这个注解是@Target@Target(value={ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})@interface MyAnno1 {} 6.2 保留策略 * 源代码文件(SOURCE):注解只在源代码中存在,当编译时就被忽略了 * 字节码文件(CLASS):注解在源代码中存在,然后编译时会把注解信息放到了class文件,但JVM在加载类时,会忽略注解! * JVM中(RUNTIME):注解在源代码、字节码文件中存在,并且在JVM加载类时,会把注解加载到JVM内存中(它是唯一可反射注解!) 限定注解的保留策略 @Retention(RetentionPolicy.RUNTIME)@interface MyAnno1 {} 7. 读取注解(反射)========================模拟注解的使用场景利用注解配置一对多,多对多关系。1.为各个实体写好注解关联关系。Department.java@Entity@Table(name="department")public class Department {@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name="did")private int did;@Column(name="dname")private String dname;@Column(name="loc")private String loc;@OneToMany(mappedBy="dep",cascade={CascadeType.ALL})private Set<Employee> emps=new HashSet<Employee>();}Employee.java@Entity@Table(name="employee")public class Employee {@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name="eid")private int eid;@Column(name="ename")private String ename;@Column(name="job")private String job;@ManyToOne-----一对多关联关系@JoinColumn(name="did")private Department dep;-------多对多关联关系@ManyToMany(cascade=CascadeType.PERSIST,fetch=FetchType.LAZY)@JoinTable(name="rational",joinColumns={@JoinColumn(name="eid",referencedColumnName="eid")},inverseJoinColumns={@JoinColumn(name="proid",referencedColumnName="proid")})private Set<Project> pros=new HashSet<Project>();Project.java@Entity@Table(name="project")public class Project {@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name="proid")private int proid;@Column(name="proname")private String pname;@Column(name="start_time")private Date strat_time;/* * @ManyToMany(cascade=CascadeType.PERSIST,fetch=FetchType.LAZY)@JoinTable(name="rational",joinColumns={@JoinColumn(name="proid",referencedColumnName="proid")},inverseJoinColumns={@JoinColumn(name="eid",referencedColumnName="eid")})*/@ManyToMany(mappedBy="pros")private Set<Employee> emps=new HashSet<Employee>();2.在核心配置文件中加入映射文件。<mapping class="org.ecjtu.entity.Employee"/> <mapping class="org.ecjtu.entity.Department"/> <mapping class="org.ecjtu.entity.Project"/>
0 0
- 注解
- 注解
- 注解
- 注解
- 注解
- 注解
- 注解
- 注解
- 注解
- 注解
- 注解
- 注解
- 注解
- 注解。
- 注解
- 注解
- 注解
- 注解
- 《程序员面试金典》--确定所有字符是否互异
- C#编程笔录--Winform 让跨线程访问变得更简单
- ios8.3 iphone6-plus box-shadow 不兼容
- How MongoDB’s Journaling Works
- nginx_tcp模块集成到openresty
- 注解
- linux下memcached安装以及启动
- Android 动态添加每条输入的内容
- easyui 模糊匹配解决办法 Firefox不会自动匹配
- UWP win10 app 新关键字x:Bing
- 安装完Ubuntu 15.04桌面后要做的15件事
- Algorithms—95.Unique Binary Search Trees II
- PHP执行exec调用svn up时候失败问题
- node-xlsx使用教程