NEW->Other->Maven->Maven Project
接下来就是maven的groupid,artifact id,version的填写
groupid:所在项目组的名字,一般是公司url倒置+项目组名
artifactid:简单来说就是项目名
version:版本号可以用默认的
接下来一路按next
生成项目后可以发现项目内容不全,造成这样的原因就是因为在构建maven项目后,默认的jdk是1.5版本的,而你自己的jdk并不是1.5版本的,所以我们要做两件事
1,补充结构,右击项目->Properties->Order and Export,自行补充缺乏的目录.
src/main/java:所有的接口和实现类均放置在这里.
src/main/resources:所有的配置文件均放置在这里
src/main/test:所有的测试类,测试单元均放置在这里
2,修改jdk版本,如果现在写一个接口,再实现这个接口,重写它的某个方法,可以发现@Override失效,这就是因为jdk1.5还不能支持重写抽象类方法的重写标注.
解决方法:右击项目->Properties->Java Build Path->Compiler level修改成自己的jdk版本
最后refresh项目
在完成以上操作后,配置pom.xml
4.0.0
com.fengsigaoju
spring-test
0.0.1-SNAPSHOT
spring-test
http://maven.apache.org
3.2.4.RELEASE
org.springframework
spring-context
${spring-version}
org.aspectj
aspectjweaver
1.6.8
commons-logging
commons-logging
1.2
org.apache.maven.plugins
maven-eclipse-plugin
2.8
true
每一个dependency中就是一个需要的jar包,具体下载到本地是jar还是war,可以在Packaging中配置
在src/main/java新建一个包为com.hello.aop
新建两个类
AfterSay.java
package com.hello.aop;
public class AfterSay {
public void aftersay(){
System.out.println("说之后");
}
}
BeforeSay.java
package com.hello.aop;
public class BeforeSay {
public void beforesay(){
System.out.println("说之前");
}
}
Say接口:
package com.hello.demo;
public interface Say {
void say();
}
SayHello.java:
package com.hello.demo;
public class SayHello implements Say {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void say() {
System.out.println("hello,"+name);
}
}
在src/main/resources上添加application.xml(有就不需要了)new ->file->application.xml
新建Test.java
package com.hello.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.hello.demo.Say;
public class Test {
public static void main(String[] args) {
ApplicationContext context= new ClassPathXmlApplicationContext("application.xml");
Say say =(Say)context.getBean("say");
say.say();
}
}
最终项目结构:
说先切入点的表达式,最严格写法:
pointcut="execution (public void execution (public void com.hello.demo.SayHello.say(..))"
public可以省略
pointcut="execution(public void execution (void com.hello.demo.SayHello.say(..))"
pointcut="execution(public void execution (* com.hello.demo.SayHello.say(..))"
pointcut="execution(public void execution (* com.*.demo.SayHello.say(..))"
指的是增强com.包下面所有的包里面的demo.SayHello.say方法
但是上面一种方式只能省略一层包,要省略所有的可以用*..*
pointcut="execution(public void execution (* *..*.demo.SayHello.say())"
pointcut="execution(* com.hello.*emo.SayHello.say(..))"
可以匹配到demo
最后say里面是参数,一般直接写..表示匹配所有参数
对于部分对于一个切面有多个操作的,为了避免大量的写pointcut="exectuin...."这种句型,可以先描写切入点,再进行引用切入点
具体写法可以修改配置文件如下: