---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
代理
1.交叉业务的编程问题几位面向方向的编程(aspect oriented program, 简称AOP),AOP的目标就是要使
交叉业务,模块化,可以采用将切面代码移动到原始方法的周围,这与直接在方法中编写切面代码
的运行效果是一样的。
2.交叉业务的模块:安全,事务,日志等功能;
3.动态代理:JVM可以在运行期动态生成出类的字节码,这种动态生成的类往往被用作代理类。
4.JVM生成的动态类必须实现一个或多个接口,所以,JVM生成的动态类只能用作具有相同接口的目标类的代理
5.CGLIB库可以动态生成一盒类的子类,一个类的子类也可以用作该类的代理,多疑,如果要为一个没有实现
接口的类生车工动态代理类,那么使用CGLIB
6.代理类的各个方法中通常除了要调用目标的相应方法和对外返回目标返回的结果外,还可以在代理方法
中的如下四个位置加上系统功能代码:
1,在调用目标方法之前;
2.在调用目标方法之后;
3,在调用目标方法前后;
4.在处理目标方法异常的catch块中
7.在 StringBuilder 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。
每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串生成器中。
append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。
8.StringBuild在单线程的情况使用则比较安全且效率很高,但是在多线程的情况下StringBuffer则比较合适
9.示例代码:
package zhang;
import java.lang.reflect.Constructor;
import java.lang.reflect.Proxy;
import java.util.Collection;
public class ProxyTest {
public static void main(String[] args) throws Exception{
Class classProxy = Proxy.getProxyClass(Collection.class.getClassLoader(),Collection.class);
System.out.println(classProxy.getName());
/*
* 查看类的构造方法
*/
Constructor constructors = classProxy.getConstructor(); //构造函数
for(Constructor constructor : constructors){
String name = constructor.getName();
StringBuilder builder = new StringBuilder(name);
builder.append('(');
Class[] classParameters = constructor.getParameterTypes();
for(Class classparameter : classParameters){
builder.append(classparameter.getName()).append(',');
}
if( classParameters != null && classParameters.length != 0){
builder.charAt(classParameters.length - 1);
}
builder.append(')');
System.out.println(builder.toString());
}
}
}
10.JVM创建动态类及其示例对象,需要提供哪些信息:
1.生成的类中有哪些方法,通过让其实现那些接口的方式进行告知;
2.产生的类字节码必须有一个关联的加载器对象;
3.生成的类中的方法的代码是怎么样的,需要我们进行提供,把代码约好的接口对象的方法中,把对象
传给它,并让它调用你的方法,
11.InvocationHandler接口中定义的invoke方法接受的三个参数:ObjectProxy,Method method,Object[] args;
12.实现AOP功能的封装与配置:
工厂类BeanFactoryuze创建目标类代理了类的实例对象,并通过配置文件实现切换,其getBean方法
根据参数字符串返回一个相应的实力对象,如果参数字符串在配置文件中对应的类名不是ProxyFactorBean
,则直接返回该类的实例对象,否则,返回该类实例对象的getProxy方法返回的对象;
13.BeanFactory的构造方法接受的配置文件格式:
1.#xxx=java.util.ArrayList;
2.xxx=创建代理
3.xxx.target=java.util.ArrayList
4.xxx.advice=代理.MyAdvice
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------