起名基于配置的Spring AOP

连锁推荐

1
廖雪峰的python教程:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/
2
runoob的python教程:http://www.runoob.com/python/python-tutorial.html

基于配置的AOP编程过程

  首先,假若要在工程中行使AOP需要多少个jar包:

  1
Aop的核心包,即org.springframework.aop-xxx.jar

  2
Spring的联盟包:aopalliance-1.0.jar

  3
aspectJ相关的jar包:aspectjrt.jar
aspectjweaver.jar

  4
如若应用了动态代理,还亟需添加cglib相关的jar包:cglib.zip

  首先需要一个AOP的切面类,用于定义各样响应事件

package com.spring.test.aop;

public class Audience {
    public void takeSeats(){
        System.out.println("The audience is taking their seats.");
    }
    public void turnOffCellPhones(){
        System.out.println("The audience is turning off their cellphones");
    }
    public void applaud(){
        System.out.println("CLAP CLAP CLAP");
    }
    public void demandRefund(){
        System.out.println("Boo! We want money back");
    }
}

  然后在bean.xml中编辑aop:config的有关内容:

...省略beans的定义内容

    <bean id="audience" class="com.spring.test.aop.Audience"/>

    <bean id="sax" class="com.spring.test.setter.Saxophone"/>
    <bean id="kenny" class="com.spring.test.setter.Instrumentalist">
         <property name="song" value="Jingle Bells" />
         <property name="age" value="25" />
         <property name="instrument" ref="sax"/>
    </bean>

    <aop:config proxy-target-class="true">
        <aop:aspect ref="audience">
            <aop:pointcut id="performance" expression="execution(* com.spring.test.action1.Performer.perform(..))"/>

            <aop:before pointcut-ref="performance" method="takeSeats"/>
            <aop:before pointcut-ref="performance" method="turnOffCellPhones"/>
            <aop:after-returning pointcut-ref="performance" method="applaud"/>
            <aop:after-throwing pointcut-ref="performance" method="demandRefund"/>
        </aop:aspect>
    </aop:config>
</beans>

  这么些中的aop:pointcut
就是利用AspectJ来定位的。意思是:当执行com.spring.test.action1.Performer的perform方法时,就会触发该切面的风波响应。

  而Performer以及Instrumentalist等等的代码,就在下边简单的都位列出来了:

  安排文件:bean.xml

起名 1起名 2

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:aop="http://www.springframework.org/schema/aop"
         xmlns:tx="http://www.springframework.org/schema/tx"
         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> 

    <bean id="audience" class="com.spring.test.aop.Audience"/>

    <bean id="sax" class="com.spring.test.setter.Saxophone"/>
    <bean id="kenny" class="com.spring.test.setter.Instrumentalist">
         <property name="song" value="Jingle Bells" />
         <property name="age" value="25" />
         <property name="instrument" ref="sax"/>
    </bean>

    <aop:config proxy-target-class="true">
        <aop:aspect ref="audience">
            <aop:pointcut id="performance" expression="execution(* com.spring.test.action1.Performer.perform(..))"/>

            <aop:before pointcut-ref="performance" method="takeSeats"/>
            <aop:before pointcut-ref="performance" method="turnOffCellPhones"/>
            <aop:after-returning pointcut-ref="performance" method="applaud"/>
            <aop:after-throwing pointcut-ref="performance" method="demandRefund"/>
        </aop:aspect>
    </aop:config>
</beans>

View Code

  艺人接口:Performer.java

起名 3起名 4

package com.spring.test.action1;

public interface Performer {
    void perform() throws PerformanceException;
}

View Code

  艺员实现类:Instrumentalist.java

起名 5起名 6

package com.spring.test.setter;

import com.spring.test.action1.PerformanceException;
import com.spring.test.action1.Performer;

public class Instrumentalist implements Performer{
    private String song;
    private int age;
    private Instrument instrument;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSong() {
        return song;
    }
    public void setSong(String song) {
        this.song = song;
    }
    public Instrument getInstrument() {
        return instrument;
    }
    public void setInstrument(Instrument instrument) {
        this.instrument = instrument;
    }
    public Instrumentalist(){}
    public Instrumentalist(String song,int age,Instrument instrument){
        this.song = song;
        this.age = age;
        this.instrument = instrument;
    }
    public void perform() throws PerformanceException {
        System.out.println("Instrumentalist age:"+age);
        System.out.print("Playing "+song+":");
        instrument.play();
    }
}

View Code

  内部bean接口:Instrument.java

起名 7起名 8

package com.spring.test.setter;

public interface Instrument {
    public void play();
}

View Code

  内部bean实现类:Saxophone.java

起名 9起名 10

package com.spring.test.setter;

public class Saxophone implements Instrument {
    public Saxophone(){}
    public void play() {
        System.out.println("TOOT TOOT TOOT");
    }
}

View Code

  测试主函数:main

起名 11起名 12

package com.spring.test.setter;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.spring.test.action1.PerformanceException;

public class test {
    public static void main(String[] args) throws PerformanceException {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");

        Instrumentalist performer = (Instrumentalist)ctx.getBean("kenny");
        performer.perform();

    }
}

View Code

  运行结果:

The audience is taking their seats.
The audience is turning off their cellphones
Instrumentalist age:25
Playing Jingle Bells:TOOT TOOT TOOT
CLAP CLAP CLAP

 

  通过这种表明格局,可以 快捷的落实切点与切面的组合,成为下边这种格式的新代码:

class{
  try{  
  audience.takeSeats();    
  audience.turnOffCellphones();

  performance.perform();  

  audience.applaud();  
  }catch(Exception){
    audience.demandRefund();
  }   
}

  面向切面的益处,要在事实上工作中多加了然才可以,常用的场地就是日记的笔录了。

 

python安装的三种情势

  • 一种是在sourceforge上下载exe文件,只要操作系统版本没问题,几乎是一键安装
  • 一种是下载zip或者tar.gz压缩包,使用其中的setup.py执行setup.py install命令安装
  • 另一种是下载whl文件,放在python的scripts文件夹中,使用命令pip install xxx.whl安装

自家这一次是因为需要的库相比多,下载的安装文件什么样子都有,所以三种办法都会以身作则下。

起名 13

连带的下载资源参考分享链接:链接:http://pan.baidu.com/s/1i4Jhez7
密码:t1sw

Spring的xml文件

  Spring的xml一般起名叫做bean.xml或者xxxapplication.xml这种,然后放在src下通过ClassPathXmlApplicationContext举行加载。文件的始末如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:aop="http://www.springframework.org/schema/aop"
         xmlns:tx="http://www.springframework.org/schema/tx"
         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> 

    <bean id="audience"class="com.spring.test.aop.Audience"/>

    <aop:config>
    </aop:config>
</beans>

  最上边的是xml的编码,这多少个就不解释了。

  上面的<beans>是Spring的安排标签,beans里面多少个紧要的习性

  xmlns:

  是默认的xml文档解析格式,即spring的beans。地址是http://www.springframework.org/schema/beans。

  通过设置这多少个特性,所有在beans里面阐明的习性,可以一直通过<>来行使,比如<bean>等等。

  xmlns:xsi:

  是xml需要听从的业内,通过URL可以见到,是w3的合并标准,前面通过xsi:schemaLocation来稳定有所的分析文件。

  xmlns:aop:

  这些是根本,是大家这边需要拔取到的一些语义规范,与面向切面AOP相关。

  xmlns:tx:

  Spring中与业务相关的布置内容。

  

  一个XML文件,只可以申明一个默认的语义分析的正规。

  例如地点的xml中就唯有beans一个是默认的,其他的都急需通过特定的价签来行使,比如aop,它自己有许多的性能,即便要使用,前边就必须抬高aop:xxx才得以。比如上边的aop:config。

  类似的,如若默认的xmlns配置的是aop相关的语义分析规范,那么在xml中就可以直接写config这种标签了。

 

python初体验

python安装完,来体会一下吧。python匡助控制台出口,也支撑在新的公文中写入多行内容,统一进行。
起名 14

与传统的AOP编程比较

  前边也做过一个价值观的spring
aop的实现形式:http://www.cnblogs.com/xing901022/p/4143696.html

  不得不说,通过ProxyFactoryBean达到的面向切面的编程,过于复杂,光是那个效能就要好好精晓一番。

起名 15

  而据悉配置的AOP使用就要简单的多,只需要一个断面的次第,然后经过配备文件就足以完全解耦的融入到切点中。

期望对这多少个刚刚打算做多少解析的爱侣,提供参考。

前面几篇学习了Spring的倚重注入,这篇起始读书另一个中央功用—— style=”color: #000080;”>面向切面编程AOP。

  通过本文,你能够掌握到:

  1
Spring xml规范

  2
透过安排文件落实面向切面编程

  3
比照与价值观AOP编程

出于近年来再做推荐系统的特色处理,需要依靠一些工具来筛选特征。最初使用了R,R的装置很简短,而且API也很容易拔取,直接就能出图。后来,发现众多少人在python和R之间做取舍,所以自己也在五个工具间摇摆不定。后来,发现Tensorflow里面有广大python的代码,而且python能够做爬虫写web,几乎是万金油的角色。本着想找一门之后平时行使的工具的心思,最后依旧挑选了python。

安装numpy和matplotlib

假使版本没问题(比如不是64位系统下载安装32位软件),那么会自动识别到python所在的目录,直接下一步安装即可。
起名 16

起名 17

Matplotlib也是一致安装即可。
起名 18

安装Python

间接运行python-2.7.13.amd64.msi,无脑下一步即可,但是要铭记在心python所在的目录C:\Python27\,稍后需要对这个目录举办添加文(加文(Gavin))件。

那么本篇就从底下多少个地方介绍下,如何在平日行使python做多少解析:

安装pyparsing

解压pyparsing压缩包,在setup.py那层目录执行setup.py install指令安装即可
起名 19

安装到这边,numpy和matplotlib就足以行使了~

安装cycler、dateutil

把whl文件拷贝到python27/scripts目录下,可以暂时忽略requests那个文件,这个requests库是webhdfs库连接hdfs环境用的,如果不使用可以用安装
起名 20

下一场分别执行命令:

pip install cycler-0.10.0-py2.py3-none-any.whl
pip install python_dateutil-2.6.1-py2.py3-none-any.whl

起名 21

  • python安装以及numpy、matplotlib的设置
  • python的hello world
  • SublimeText的python集成
  • 连锁推荐

Python以及必要的库安装

Python如今有多少个本子,一个是2.7,一个是3.4,在同事的引进下,接纳了2.7。Python的下载直接去官网就可以了,但是想要做多少解析,还索要倚重很多其它的模块,比如科学总计库Numpy,图形库matplotlib,数值总计库scipy,数据挖掘分析库pandas,本篇就先安装个Numpy和matplotlib,以做示范,其他库的装置基本类似。

SublimeText集成

直白选取IDLE,有点太辛劳,直接基于sublime
text开发过ruby和web前端,体验异常好,所以如故想经过sublimeText编写python代码。

从而首先在点击Tools->Build System->New Build System,弹出文件:
{
“shell_cmd”: “make”
}

按照下边的配置输入:
{
“cmd”: [“C:/Python27/python.exe”, “-u”, “$file”],
“file_regex”: “^[ ]File “(…?)”, line ([0-9]*)”,
“selector”: “source.python”
}
并保存成温馨的名字(我起名叫做my_python),注意路径需要修改为本地的python路径。路径为C:\Users\xxh\AppData\Roaming\Sublime Text 3\Packages\User

在Tools -> Build System 中重新采纳my_pyhton

然后再SublimeText中感受一下matplotlib的魅力,代码如下:

import numpy as np
import matplotlib.pyplot as plt
plt.figure(1)
ax1=plt.subplot(211)
x=np.linspace(0,100,100)
for i in xrange(1,100):
    plt.figure(1)
    plt.plot(x,x*2)
plt.show()

按ctrl+B即可实施:
起名 22

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图