用java的动态代理模式写jdbc 求代码 谢谢import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnection {
private final String DRIVER="com.mysql.jdbc.Driver";//mysql数据库驱动
private final String URL="jdbc:mysql://localhost:3306/test";//url
private final String USERNAME="root";//用户名
private final String PASSWORD="root";
Connection conn=null;//定义对象
public DBConnection(){//初始化
try{
Class.forName(DRIVER);
conn =DriverManager.getConnection(URL,USERNAME,PASSWORD);//
System.out.println("连接成功!");
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
catch(SQLException e){
e.printStackTrace();
}
}
public Connection getConnection(){
return this.conn;
}
public void distory(){//用完数据库关闭
try{
conn.close();
}
catch (SQLException e){
e.printStackTrace();
}
}
}
用的时候直接调用conn这个变量就可以了?。。。?
java 动态代理method.invoke() 意思就是 运行你反射出来的这个方法java动态代理的代码 , 运行完后将返回值给你 , 你可以在运行这个方法之前或者之后写你需要的逻辑,代理的意思 差不多就这样,举个生活中的例子,现在你要买一个房子,你可以直接自己去买,找到房东,现在我们用代理,你现在找到中介,中介就是代理,房东本来 卖房子50W , 现在你买房子你给中介50W,但是中介要抽手续费,抽5W,然后给房东45W,房东拿到钱就是Method.invoke(钱)java动态代理的代码;但是这个钱本来是50W , 但是只有45Wjava动态代理的代码了,写个伪代码 。
中介
class $proxy{
var money = 50W;
//抽取手续费
var praMoney = money - 5W;
//实际给房东价格
return method.invoke(praMoney);
}
class user{
//找中介
proxy(50W);
}
java动态代理怎样实现?在目前的Java开发包中包含了对动态代理的支持java动态代理的代码 , 但是其实现只支持对接口的的实现 。
其实现主要通过是java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口 。
Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现,如下,HelloWorld接口定义的业务方法,HelloWorldImpl是HelloWorld接口的实现 , HelloWorldHandler是InvocationHandler接口实现 。代码如下:
业务接口:
public interface HelloWorld {
void sayHelloWorld() ;
}
业务接口实现:
public class HelloWorldImpl implements HelloWorld {
public void sayHelloWorld() {
System.out.println("Hello World!");
}
}
InvocationHandler实现 , 需要在接口方法调用前后加入一部份处理工作,这里仅仅在方法调用前后向后台输出两句字符串,其代码如下:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class HelloWorldHandler implements InvocationHandler {
//要代理的原始对象
private Object objOriginal;
/**
* 构造函数 。
* @param obj 要代理的原始对象 。
*/
public HelloWorldHandler(Object obj) {
this.objOriginal = obj ;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result ;
//方法调用之前
doBefore();
//调用原始对象的方法
result = method.invoke(this.objOriginal ,args);
//方法调用之后
doAfter();
return result ;
}
private void doBefore() {
System.out.println("before method invoke!");
推荐阅读
- 制作微信网站的链接,微信自己制作链接
- chatgpt提问要收费吗,chattalk
- 益智沙盘游戏.,益智沙盘游戏
- 笔记本电脑显卡怎么换,笔记本电脑显卡换一个多少钱
- python缓动函数 python执行慢
- 卟扒公众号怎么用,爬微信公众号
- 天津路由器怎么重启密码,tianyi路由器管理密码
- 游戏开发大亨手谈,游戏开发大亨攻略2021
- mysql数据怎么加写锁 mysql 怎么加锁