欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java編譯期間注入代碼 java編譯時注解 生成代碼

java腳本注入

這個應該采用預編譯語句集,它內置了處理SQL注入的能力,只要使用它的setString方法傳值即可:

網站建設哪家好,找成都創(chuàng)新互聯(lián)!專注于網頁設計、網站建設、微信開發(fā)、小程序制作、集團企業(yè)網站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了烏魯木齊免費建站歡迎大家使用!

String?sql=?"select?b?from?表?where?a='?'";

PreparedStatement?preState?=?conn.prepareStatement(sql);

preState.setString(1,?keyword);

ResultSet?rs?=?preState.executeQuery();

如何利用Java實現(xiàn)資源注入

Java的功能強大,今兒博洋教育將給大家介紹。 需求:一個應用有兩個數(shù)據庫,分別為DB-A,DB-B。 假設持久層框架使用iBatis來實現(xiàn),那么SqlMapClient對象在創(chuàng)建時,對于兩個不同的DB連接要有兩個不同的SqlMapClient對象, 假設我們有一個Service類為MyService.java,該類中有兩個SqlMapClient對象sqlMapA、sqlMapB分別對應著DB-A、DB-B。 先看看我們的SqlMapClient.java類:(自定義SqlMapClient類,用來演示。) import java.util.Map; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; @SuppressWarnings("unchecked") public class SqlMapClient { public SqlMapClient(String s, String t) { sqlMap = s; type = t; } public SqlMapClient() { } private String type = null; private String sqlMap = null; // get、set方法 略 // 用于演示查詢后返回一個String的返回結果 public String selectForObject(String sql, Map in) { return this.toString(); } @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)。append("sqlMap", sqlMap) .append("type", type)。toString(); } } MyService.java類實現(xiàn): import java.util.Map; @SuppressWarnings("unchecked") public class MyService { @DataSource(type="B", sqlMap="com/annotation/sql-map-config-B.xml") private SqlMapClient sqlMapB = null; @DataSource(type="A", sqlMap="com/annotation/sql-map-config-A.xml") private SqlMapClient sqlMapA = null; // get、set方法 略 // 模擬在DB-B數(shù)據庫取得數(shù)據 public String selectForObjectFromB(String sql, Map in) { return sqlMapB.selectForObject("", null); } // 模擬在DB-A數(shù)據庫取得數(shù)據 public String selectForObjectFromA(String sql, Map in) { return sqlMapA.selectForObject("", null); } } 接下來就是我們的注解類:DataSource.java import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface DataSource { /** * Dao的類型 * @return */ String type() default "A"; // 連接的數(shù)據庫類型 A or B String sqlMap() default ""; // Sql-Map-Config文件的路徑,用于加載iBatis的SqlMapClient對象 } 定義資源注入的接口 IFieldWiring.java。 之所以這里要定義這個接口,是為了以后擴展用,我們很方便的定義更多的自定義注解。 IFieldWiring.java import java.lang.annotation.Annotation; import java.lang.reflect.Field; public interface IFieldWiring { Class clazz = obj.getClass(); try { String methodname = "get" + StringUtils.capitalize(fieldName); Method method = clazz.getDeclaredMethod(methodname); method.setAccessible(true); return method.invoke(obj); } catch (Exception e) { try { Field field = clazz.getDeclaredField(fieldName); field.setAccessible(true); return field.get(obj); } catch (Exception e1) { e1.printStackTrace(); } } return null; } public static void setFieldValue(Object target, String fname, Class fieldClass, Object fieldObj) { if (!fieldClass.isAssignableFrom(fieldObj.getClass())) { return; } Class clazz = target.getClass(); try { Method method = clazz.getDeclaredMethod("set" + Character.toUpperCase(fname.charAt(0)) + fname.substring(1), fieldClass); method.setAccessible(true); method.invoke(target, fieldObj); } catch (Exception e) { try { Field field = clazz.getDeclaredField(fname); field.setAccessible(true); field.set(target, fieldObj); } catch (Exception e1) { e1.printStackTrace(); } } } } 已經基本大功告成了,只要將我們的DataSourceWiring.java類使用起來即可。 MyAnnotationBeanProcessor.java,這個類主要用于為bean對象注入資源。 import java.lang.reflect.Field; public class MyAnnotationBeanProcessor { /** * 注入資源 * @param serviceObject * @param fieldAutoWirings // 所有實現(xiàn)IFieldWiring的接口的對象,我們可以在此擴展 * @throws Exception */ public void wire(Object serviceObject, IFieldWiring fieldAutoWirings) throws Exception { Class cls = serviceObject.getClass(); for (Field field : cls.getDeclaredFields()) { for (IFieldWiring fieldAutoWiring : fieldAutoWirings) { if (field.isAnnotationPresent(fieldAutoWiring.annotationClass())) { fieldAutoWiring.wiring(serviceObject, field); break; } } } } } 好了,開始我們的測試類:FieldWiringTest.java public class FieldWiringTest { public static void main(String args[]) throws Exception { MyAnnotationBeanProcessor processor = new MyAnnotationBeanProcessor(); MyService b = new MyService(); processor.wire(b, new DataSourceWiring()); // 注入DataSource資源 System.out.println(b.selectForObjectFromB("", null)); System.out.println(b.selectForObjectFromA("", null)); } } 執(zhí)行結果: SqlMapClient[sqlMap=com/annotation/sql-map-config-B.xml,type=B] SqlMapClient[sqlMap=com/annotation/sql-map-config-A.xml,type=A] 由執(zhí)行結果可以說明DataSource資源已經被我們正確的注入了。 如果想擴展的話,只需要新建一個類實現(xiàn)IFieldWiring接口即可。假設叫InParamWiring.java,實現(xiàn)了接口定義的兩個方法后,在使用的時候,只要用以下代碼便可將資源注入了: MyAnnotationBeanProcessor processor = new MyAnnotationBeanProcessor(); MyService b = new MyService(); processor.wire(b, new DataSourceWiring(), new InParamWiring()); // 注入DataSource、InParam資源. 更多Java學習技巧,盡在博洋教育。若您想了解java程序培訓價格,歡迎向我們的在線老師進行詳細了解。

求JAVA 注入進程的例子

此代碼注入非依賴注入,是hack里的?代碼注入

場景是這樣滴:

機器上有一個java進程,我不想停止它,但我想把一段代碼植入進去,干

一些事情(獲取一些信息,改變一些值,監(jiān)控一些東西,或者其它猥瑣的事情)

這個進程不能停,而且也沒有預料到現(xiàn)在的事情,或者這個進程的代碼完全不能修改。

好,這篇文章是要干這個事情,它基于?jvm的?jdi或者jvmti?接口

這里用的jvmti,jdi也可以,麻煩不少

應該jdk1.5?就有,需要用c寫。1.6?支持另一種方式,java也可以寫

以前做過類似的事情,代碼找不到了,現(xiàn)在有實現(xiàn)了一番。

直接上代碼:

被注入的代碼是這樣滴:

while(true) {

System.out.println(System.currentTimeMillis());

Thread.sleep(1000);

}

每隔一秒輸出當前時間,只是示意用。不管什么java程序都行

我要注入的類,那個方法是固定的:

package com.zms.inject;

import java.lang.instrument.Instrumentation;

public class MyAgent1 {

public static void premain(String s) {

premain(s, null);

}

public static void premain(String s, Instrumentation instru) {

System.out.println("I'm injected! 木哈哈哈哈哈");

System.out.printf("param: %s\n", s);

}

public static void agentmain(String args, Instrumentation inst) {

premain(args, inst);

}

public static void agentmain(String args) {

premain(args);

}

}

編譯,打入jar包

MANIFEST.MF

Manifest-Version:?1.0

Created-By:?1.6.0_26?(Apple?Inc.)

Agent-Class:?com.zms.inject.MyAgent1

Premain-Class:?com.zms.inject.MyAgent1

操作代碼:

import com.sun.tools.attach.*;

import com.sun.tools.attach.spi.AttachProvider;

VirtualMachine vm=VirtualMachine.attach("24862"); //target java process pid

System.out.println(vm);

vm.loadAgent("/Users/zms/workspace/mt/out/production/agent1.jar","Powered by zms!");

Thread.sleep(1000);

vm.detach();

目標程序結果:?

1317283652520

1317283653520

1317283654521

I'm?injected!?木哈哈哈哈哈

param:?Powered?by?zms!

1317283655521

1317283656522

分享題目:java編譯期間注入代碼 java編譯時注解 生成代碼
本文URL:http://chinadenli.net/article0/hejgoo.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供品牌網站設計微信小程序動態(tài)網站App開發(fā)網站內鏈營銷型網站建設

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都做網站