java反射invoke動(dòng)態(tài)調(diào)用方法

@Service
@Transactional(rollbackFor = Exception.class)
public class testService {
    @Autowired
    TestMapper testMapper;

    /**第一步*/
    private static TestService testService;
    /**第二步*/
    @PostConstruct 
    public void init(){
        testService = this;
        testService.testMapper = this.testMapper;
    }

    public List<Test> getList(Integer page, Integer size, String keywords) {
        int start = (page - 1) * size;

        Date endDate =  null;
        Date startDate = null;

        String methodName = "testMethod";

        list = (List<Test>) testService.invoke("org.basic.service.testService", 
                                  methodName , start, size, keywords);

        return list;
    }

    /**
     * 反射調(diào)用動(dòng)態(tài)方法
     */
    public List<Test> testMethod(Integer start, Integer size, String keywords){
        List list = null;
        try {
        /**第三步*/
            list = testService.testMapper.getListByPage(start, size, keywords);
        }catch (NullPointerException e){
            e.printStackTrace();
        }
        return  list;
    }
    /**
     * 方法反射
     * @param className
     * @param methodName
     * @param params
     * @return
     */
    public static Object invoke(String className, String methodName, Object...params){
        try {

            Class<?> c = Class.forName(className);
            Object obj = c.newInstance();
            Method[] methods = c.getDeclaredMethods();
            Method callMethod = null;
            for(Method method:methods){
                if(method.getName().equals(methodName)){
                    callMethod = method;
                    break;
                }
            }
            callMethod.setAccessible(true);
            return callMethod.invoke(obj, params);

        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return  null;
    }

@Autowired標(biāo)簽自動(dòng)注入TestMapper失敗满力,可能出現(xiàn)的空指針報(bào)錯(cuò):

java.lang.NullPointerException

解決:注意代碼中標(biāo)明的第一步,第二步,第三步

從Java EE5規(guī)范開(kāi)始,Servlet增加了兩個(gè)影響Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct煮嫌。這兩個(gè)注解被用來(lái)修飾一個(gè)非靜態(tài)的void()方法.而且這個(gè)方法不能有拋出異常聲明丢间。

被@PostConstruct修飾的方法會(huì)在服務(wù)器加載Servlet的時(shí)候運(yùn)行,并且只會(huì)被服務(wù)器調(diào)用一次亩鬼,類(lèi)似于Serclet的inti()方法殖告。被@PostConstruct修飾的方法會(huì)在構(gòu)造函數(shù)之后,init()方法之前運(yùn)行雳锋。

被@PreDestroy修飾的方法會(huì)在服務(wù)器卸載Servlet的時(shí)候運(yùn)行黄绩,并且只會(huì)被服務(wù)器調(diào)用一次,類(lèi)似于Servlet的destroy()方法玷过。被@PreDestroy修飾的方法會(huì)在destroy()方法之后運(yùn)行爽丹,在Servlet被徹底卸載之前。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辛蚊,一起剝皮案震驚了整個(gè)濱河市粤蝎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌袋马,老刑警劉巖初澎,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異飞蛹,居然都是意外死亡谤狡,警方通過(guò)查閱死者的電腦和手機(jī)灸眼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)墓懂,“玉大人焰宣,你說(shuō)我怎么就攤上這事〔蹲校” “怎么了匕积?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)榜跌。 經(jīng)常有香客問(wèn)我闪唆,道長(zhǎng),這世上最難降的妖魔是什么钓葫? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任悄蕾,我火速辦了婚禮,結(jié)果婚禮上础浮,老公的妹妹穿的比我還像新娘帆调。我一直安慰自己,他們只是感情好豆同,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布番刊。 她就那樣靜靜地躺著,像睡著了一般影锈。 火紅的嫁衣襯著肌膚如雪芹务。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天鸭廷,我揣著相機(jī)與錄音枣抱,去河邊找鬼。 笑死靴姿,一個(gè)胖子當(dāng)著我的面吹牛沃但,可吹牛的內(nèi)容都是我干的磁滚。 我是一名探鬼主播佛吓,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼垂攘!你這毒婦竟也來(lái)了维雇?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤晒他,失蹤者是張志新(化名)和其女友劉穎吱型,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體陨仅,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡津滞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年铝侵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片触徐。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咪鲜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出撞鹉,到底是詐尸還是另有隱情疟丙,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布鸟雏,位于F島的核電站享郊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏孝鹊。R本人自食惡果不足惜炊琉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望又活。 院中可真熱鬧温自,春花似錦、人聲如沸皇钞。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)夹界。三九已至馆里,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間可柿,已是汗流浹背鸠踪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留复斥,地道東北人营密。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像目锭,于是被迫代替她去往敵國(guó)和親评汰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359