国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

給注解定義屬性/方法與給反射用并控制事務(wù) (66)

2019-11-15 00:15:05
字體:
供稿:網(wǎng)友
給注解定義屬性/方法與給反射用并控制事務(wù) (66)8、給注解定義屬性/方法

如果某個注解需要一個標(biāo)識,就給它定義一個屬性.

定義的方法:@Retention(RetentionPolicy.RUNTIME)@Target(value={ElementType.METHOD})public @interface MyTest {    /**     * 對于一人注解類來說。     * value屬性是官方建議取的名稱     * 且value也是默認(rèn)屬性     * 以下定義的屬性,因?yàn)闆]有默認(rèn)值 ,所以用戶     * 在使用時必須給顯式的給值     */    public String value();    /**     * 定義一個擁有默認(rèn)值的屬性     */    public String name() default "NoName";}

獲取注解上的屬性的值:

<A extends Annotation> A

getAnnotation(Class<A>annotationClass) 如果存在該元素的指定類型的注釋,則返回這些注釋,否則返回 null。

public class AnlyValueDemo {    public static void main(String[] args) throws Exception {        RunTest run = new RunTest();        Method m1 = run.getClass().getMethod("bbb");        //獲取這個方法上的注解的實(shí)例        MyTest mt = m1.getAnnotation(MyTest.class);         //獲取這個注解上的屬性的值        String name = mt.name();        String value = mt.value();        System.err.

用途:生成表結(jié)構(gòu)并保存,以下是SUN公司提供的注解:

在系統(tǒng)中存在很多的注解,其中有些注解是給JDBC。

@Table – 定義一個類,這個類對應(yīng)一個表-領(lǐng)域模型

@Column – 定義一個類其中的某個字段

@Id 定義主鍵

@OnToMany

@OneToOne

@ManyToMany

9、 注解給反射用并控制事務(wù)

對所有的service進(jìn)行代理。

要求:

被代理類必須要擁有接口。

代理的兩個核心類:

Proxy :在內(nèi)存中生成接口的子類。

InvocationHandler : 執(zhí)行句柄,在執(zhí)行代理類的方法時,此Invocationhandler會攔截所有代理類的方法。

示例:

要求對List進(jìn)行代理:

package cn.hx.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.util.ArrayList;import java.util.List;public class ProxyDemo {    public static void main(String[] args) throws Exception {        //聲明被代理類        final List list = new ArrayList();        //生成代理類        Object obj = Proxy.newProxyInstance(                ProxyDemo.class.getClassLoader(),                new Class[]{List.class},                new InvocationHandler() {                    public Object invoke(Object proxy, Method method, Object[] args)                            throws Throwable {                        System.err.println("執(zhí)行某個方法了:"+method.getName());                        //執(zhí)行被代理類                        Object returnValue = method.invoke(list, args);                        return returnValue;                    }                });        //將代理類轉(zhuǎn)換成接口的對象        List list2 = (List) obj;        list2.add("ddd");        System.err.println(list2.get(0));    }}

要求實(shí)現(xiàn)一個類可以對所有擁有接口的類都可以代理:

package cn.hx.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;/** * 此類不但是工具類,且還是執(zhí)行句柄 * */public class MyProxy2 implements InvocationHandler {    /**     * 聲明被代理類     */    private Object src;    /**     * 構(gòu)造 中接收這個被代理的對象     */    private MyProxy2(Object src){        this.src=src;    }    /**     * 提供一個靜態(tài)方法返回代理對象     */    public static Object factory(Object src){        Object proxyedObj =                 Proxy.newProxyInstance(                        MyProxy2.class.getClassLoader(),                        src.getClass().getInterfaces(),                        new MyProxy2(src));        return proxyedObj;    }    /**     * 實(shí)現(xiàn)執(zhí)行攔截方法     */    public Object invoke(Object proxy, Method method, Object[] args)            throws Throwable {        System.err.println("執(zhí)行的方法是>>>>:+"+method.getName());        Object rVlaue = method.invoke(src,args);        return rVlaue;    }}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 裕民县| 呼图壁县| 泰州市| 容城县| 阳西县| 和田县| 郴州市| 鄄城县| 双峰县| 乌海市| 南阳市| 浑源县| 左云县| 凤台县| 葵青区| 怀来县| 吴旗县| 河西区| 宝山区| 汉沽区| 巩义市| 九龙城区| 水城县| 华安县| 乌海市| 佳木斯市| 哈尔滨市| 宜良县| 吴忠市| 满城县| 文水县| 沿河| 北辰区| 普格县| 晴隆县| 乐安县| 平乐县| 麦盖提县| 清原| 山东省| 吉林市|