一、实现步骤:
1.创建项目,导入Spring包,core和aop这两块的包。
2.在ApplicationContext.xml中加入必要配置,配置需要扫描的包和自动代理设置
<?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:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<context:component-scan base-package="com.*"></context:component-scan>
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
</beans>
3.加入切面类
项目类清单:
下面是各个类的实现:
UserAction.java
package com.action;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import com.service.UserService;
@Controller
public class UserAction {
@Resource
UserService biz;
public void print(){
biz.print();
System.out.println("UserAction被调用");
}
@PostConstruct
public void before(){
System.out.println("UserAction初始化调用");
}
@PreDestroy
public void after(){
System.out.println("UserAction销毁调用");
}
}
UserDao.java
package com.dao;
public interface UserDao {
void print();
}
UserDaoImpl
package com.daoImpl;
import javax.annotation.Resource;
import org.springframework.stereotype.Repository;
import com.dao.UserDao;
import com.util.HibernateUtil;
@Repository
public class UserDaoImpl implements UserDao {
@Resource
HibernateUtil hutil;
@Override
public void print() {
hutil.print();
// TODO Auto-generated method stub
System.out.println("UserDaoImpl被调用");
}
}
User.java
package com.entity;
public class User {
private String name;
private String work;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getWork() {
return work;
}
public void setWork(String work) {
this.work = work;
}
}
PowerInterceptor.java
package com.interceptor;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class PowerInterceptor {
@Pointcut("execution(* com.action.*.*(..))")
private void anyMethod(){
};//声明一个切入点
@Before("anyMethod() && args()")
public void doBefore(){
System.out.println("前置通知");
}
@AfterReturning(pointcut = "anyMethod()", returning = "name")
public void doAfterReturning(String name){
System.out.println("后置通知:");
}
@AfterThrowing("anyMethod()")
public void doAfterThrowing(){
System.out.println("例外通知");
}
@After("anyMethod()")
public void doAfter(){
System.out.println("最终通知");
}
@Around("anyMethod()")
public Object doAound(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("环绕通知");
//获得当前切面的值
String className = pjp.getSignature().getDeclaringTypeName();
System.out.println(className);
Object obj = null;
return pjp.proceed();
}
}
UserService.java
package com.service;
public interface UserService {
void print();
}
UserServiceImpl.java
package com.serviceImpl;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.dao.UserDao;
import com.service.UserService;
@Service
public class UserServiceImpl implements UserService{
@Resource
UserDao userDao;
@Override
public void print() {
userDao.print();
System.out.println("UserServiceImpl使用");
}
}
Test.java
package com.test;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.action.UserAction;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
FileSystemXmlApplicationContext ftc = new FileSystemXmlApplicationContext(new String[]{"src/applicationContext.xml"});
UserAction userAction = (UserAction)ftc.getBean("userAction");
userAction.print();
}
}
HibernateUtil.java
package com.util;
import org.springframework.stereotype.Component;
@Component
public class HibernateUtil {
public void print(){
System.out.println("HibernateUtil加载");
}
}
4.输出结果