1.新建java项目
2.新建lib,导入jar,新建实现类Category 和Product :
package com.how2java.pojo; /** * 类别 */ public class Category { public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } private int id; private String name; }
package com.how2java.pojo; /**产品类 * @author lenovo */ public class Product { private int id; private String name; private Category category; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Category getCategory() { return category; } public void setCategory(Category category) { this.category = category; } }
3.使用注解配置业务类
package com.how2java.service; import org.springframework.stereotype.Component; /** * 业务类 * 使用@Component("s") 注解ProductService 类 * @author lenovo */ @Component("s") public class ProductService { public void doSomeService(){ System.out.println("doSomeService"); } }
4.注解配置业务切面,在LoggerAspect类中
package com.how2java.aspect; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** * 日志切面的功能是 在调用核心功能之前和之后分别打印日志,切面就是新能统计,日志输出,事务管理 * 来与某个核心功能编织之后,用于执行核心功能的代码 * 核心业务:登录,查询,生成订单 * @Aspect 注解表示这是一个切面 * @Component 表示这是一个bean, 由Spring进行管理 * @Around(value = "execution(* com.how2java.service.ProductService.*(..))") 表示对com.how2java.service.ProductService 这个类中的所有方法进行切面操作 * @author lenovo */ @Aspect @Component public class LoggerAspect { @Around(value = "execution(* com.how2java.service.ProductService.*(..))") public Object log(ProceedingJoinPoint joinPoint) throws Throwable { System.out.println("start log:" + joinPoint.getSignature().getName()); Object object = joinPoint.proceed(); System.out.println("end log:" + joinPoint.getSignature().getName()); return object; } }
5.配置spring的核心配置文件
<?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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 扫描包com.how2java.aspect和com.how2java.service,定位业务类和切面类-->
<context:component-scan base-package="com.how2java.aspect"/>
<context:component-scan base-package="com.how2java.service"/>
<aop:aspectj-autoproxy/>
</beans>
6.测试类:
package com.how2java.test; import com.how2java.service.ProductService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * 测试业务类是否成功 * @author lenovo */ public class SpringTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( new String[] { "applicationContext.xml" }); ProductService s = (ProductService) context.getBean("s"); s.doSomeService(); } }
运行结果:
start log:doSomeService
doSomeService
end log:doSomeService