实习总结(九)0806

Python基础爬虫的学习

Python爬虫:

response = urllib2.urlopen(url,data,timeout);

第一个参数是url,第二个参数data,是访问url时要传的数据,第三个timeout是设置的超时时间。

response.read可以返回获取到的网页内容。

 

Spring AOP的实现学习

AOP:面向方面(切面)编程,作为面向对象的一种补充,用于处理系统中分布各个模块的横切关注点比如事物管理,日志,缓存等等。AOP实现的关键在于AOP框架自动创建的AOP代理。AOP代理主要分为静态代理和动态代理,静态代理的代表是AspectJ;而动态代理则以Spring aop为代表。

1使用AspectJ的编译时增强实现AOP

AspectJ是静态代理的增强,所谓的静态代理就是AOP框架会在编译阶段是生成AOP代理类。

2与AspectJ的静态代理不同,Spring AOP使用的是动态代理。所谓的动态代理就是说AOP框架不会去修改字节码,而是在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并在在特定的切点做了增强处理,并回调原对象的方法。

主要有两种动态代理方式,JDK代理和CGLIB动态代理,JDK代理通过反射来反射来接受被代理的类。并且要求被代理的类必须实现一个接口。JDK动态代理的核心是InvocationHandler接口和proxy类。

如果目标类没有实现接口,那么Spring AOP会选择使用CGLIB来动态代理目标类CGLIB是一个代码生成的类库,可以在运行时动态的生成某个类的子类。CGLIB是一个代码生成的类库,可以在运行时动态的生成某个类的子类,CGLIB是通过继承的方式做的动态代理。如果某个类被标记成final,那么它将无法使用CGLIB做动态代理。

通过“java.lang.reflect.Proxy”类提供的newProxyInstance方法创建一个对象的代理对象。

newProxyInstance(

ClassLoader loader, Class<?>[] interfaces ,InvocationHandler h)创建一个对象的代理对象。ClassLoader loader是生成代理对象使用的是哪个类装在器,Class<?>[] interfaces指明生成哪个对象的代理对象。InvocationHandler h指明这个代理对象要做什么事。

例子:https://blog.csdn.net/pangqiandou/article/details/52964066

在动态代理例子中,由于不管用户调用代理对象的什么方法。都是调用的开发人员便携的处理器的invoke方法。通过invoke参数,知道用户用的是什么方法。

概念:

切入点pointcut:在哪些类,哪些方法上切入。

通知advice:在方法执行什么的时候做什么。

切面aspect:切入点+通知,在什么时机,什么地方,做何种增强。

织入weave:把切面加到对象上,并创造出代理对象的过程,

主要例子如下:

https://www.atatech.org/articles/110261?spm=a1z2e.8101737.webpage.dtitle1.29106a6c8Z2Kt4

https://www.cnblogs.com/wangyayun/p/6800902.html

猜你喜欢

转载自blog.csdn.net/xhjj520/article/details/81636078
今日推荐