1.spring配置文件有问题添加 <?xml version="1.0" encoding="UTF-8"?> 有时候其他地方复制过来依然会报错,使用模板自己创建一个。
警告: Ignored XML validation warning
org.xml.sax.SAXParseException; lineNumber: 8; columnNumber: 77;
schema_reference.
4: 无法读取方案文档 'https://www.springframework.org/schema/beans/spring-beans.xsd', 原因为
1) 无法找到文档;
2) 无法读取文档;
3) 文档的根元素不是 <xsd:schema>。
2.提交事务的时候,先要将自动提交关闭:autocommit=false
java.sql.SQLException: Can't call commit when autocommit=true
3.@Test相当于main函数,@Test只有一个线程,将连接对象用线程绑定起来
ThreadLocal<T>
将当前连接对象移除当前线程绑定
事务和线程是两个概念,同一个线程不影响事务的提交
类加载器(ClassLoader):用来加载字节码文件
动态代理
* 在程序运行过程中进行代理
* 特点:使用字节码的形式,加载创建
* 作用:不修改源码对方法进行改进
* 分类:JDK动态代理和Cglib动态代理
* JDK动态代理:Proxy
* 被代理对象必须实现某个接口
* Proxy.newProxyInstance(ClassLoader,class[] args,InvocationHandler)
* ClassLoader:需要被代理对象的类加载器
import com.tedu.entity.Iproducer;
import com.tedu.entity.Producer;
import org.junit.Test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class Client {
@Test
public void test(){
/**
* 动态代理
* 在程序运行过程中进行代理
* 特点:使用字节码的形式,加载创建
* 作用:不修改源码对方法进行改进
* 分类:JDK动态代理和Cglib动态代理
* JDK动态代理:Proxy
* 被代理对象必须实现某个接口
* Proxy.newProxyInstance(ClassLoader,class[] args,InvocationHandler)
* ClassLoader:需要被代理对象的类加载器
*
*/
//被代理对象
final Producer producer = new Producer();
//获取代理对象
Iproducer producerProxy = (Iproducer)Proxy.newProxyInstance(producer.getClass().getClassLoader(), producer.getClass().getInterfaces(), new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
/**
* proxy代理对象的引用
* method代理对象执行的方法
* args代理对象执行方法所需的参数
*/
Object value = null;
Double money = (Double)args[0];
if(method.getName().equals("saleAfter")){
value = method.invoke(producer, money * 2);
}
return value;
}
});
// producerProxy.salePhone(1000);
producerProxy.saleAfter(300);
}
}