最简单的SpringAop 小案例
网盘下载地址:
链接:https://pan.baidu.com/s/1Z-em-1ouWyXeMP3JW0IbCg
提取码:0o4o
1、目录结构:

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: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"> <!--告訴Spring使用注解的形式-->
<!-- <context:annotation-config/>
控制反转目标类
<bean name="c" class="com.how2java.pojo.Category">
<property name="name" value="category 1" />
</bean>
<bean name="product" class="com.how2java.pojo.Product">
<property name="name" value="牙刷"></property>
<!– <property name="category" ref="c"></property>–>
</bean>-->
<!--<context:component-scan>: 表示要扫描那个包下面的文件,然后通过注解的形式注入进来-->
<context:component-scan base-package="com.how2java.pojo,com.how2java.service,com.how2java.controller"></context:component-scan> <!--面向切面编程 SpringAOP 开始--> <!--控制反转切面类-->
<bean name="loggerAspect" class="com.how2java.aspect.LoggerAspect"></bean> <!--控制反转切面类-->
<bean name="controllerAspect" class="com.how2java.aspect.controllerAspect"></bean> <aop:config>
<!--<aop:pointcut>:作用: 设置切入点的作用对象和id-->
<aop:pointcut id="loggerCutpoint" expression="execution(* com.how2java.service.ProductService.*(..))"></aop:pointcut>
<aop:pointcut id="curePoint" expression="execution(* com.how2java.controller.TestController.*(..))"></aop:pointcut> <!--<aop:aspect>:作用:设置切面的id-->
<aop:aspect ref="loggerAspect" id="logAspect">
<aop:before method="before" pointcut-ref="loggerCutpoint"></aop:before>
<aop:after method="after" pointcut-ref="loggerCutpoint"></aop:after>
<aop:around method="log" pointcut-ref="loggerCutpoint"></aop:around> </aop:aspect> <aop:aspect ref="controllerAspect" id="conAspect">
<aop:before method="testController" pointcut-ref="curePoint"></aop:before>
</aop:aspect>
</aop:config> <!--面向切面编程 SpringAOP 结束--> </beans>
3、切面类 controllerAspect.java 、LoggerAspect.java
package com.how2java.aspect; import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller; /**
* describe:
*
* @author 王立朝
* @date 2019/09/18
*/
public class controllerAspect { public void testController(){
System.out.println("执行controller之前先执行这个方法再说==");
}
}
package com.how2java.aspect; import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.stereotype.Component;
import sun.misc.Contended; /**
* describe:日志,切面
*
* @author 王立朝
* @date 2019/09/18
*/
public class LoggerAspect { public Object log(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("日志开始-" + joinPoint.getSignature().getName());
Object object = joinPoint.proceed();
System.out.println("日志结束-" + joinPoint.getSignature().getName());
return object;
} public void before(){
System.out.println("最先开始---" ); } public void after(){
System.out.println("最后结束的---" );
}
}
4、目标方法类 TestController.java 、 ProductService.java
package com.how2java.controller; import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller; /**
* describe:
*
* @author 王立朝
* @date 2019/09/18
*/
@Component("testController")
public class TestController { public void testController(){
System.out.println("控制器");
}
}
package com.how2java.service; import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service; /**
* describe:业务类
*
* @author 王立朝
* @date 2019/09/18
*/
/*@Component("productService")*/
@Service
public class ProductService { public void doSomeService(){
System.out.println("doSomeService");
} }
5、测试类
package com.how2java.test; import com.how2java.controller.TestController;
import com.how2java.service.ProductService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* describe:
*
* @author 王立朝
* @date 2019/09/18
*/
public class TestSpringAop { public static void main(String[] args){
// productService ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
ProductService productService = (ProductService) context.getBean("productService");
productService.doSomeService();
/* TestController testController = (TestController) context.getBean("testController");
testController.testController();*/
}
}
6、运行结果

注意,在Spring中获取bean 的方式
当只有一个配置文件的时候,可以用下面的方式来获取上下文
ApplicationContext context = new ClassPathXmlApplicationContext(“applicationContext.xml”);
如果有多个配置文件,可以用下面的方式来获取上下文
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml","helloContext.xml"});
最简单的SpringAop 小案例的更多相关文章
- 一个简单的Maven小案例
Maven是一个很好的软件项目管理工具,有了Maven我们不用再费劲的去官网上下载Jar包. Maven的官网地址:http://maven.apache.org/download.cgi 要建立一个 ...
- Session小案例-----简单购物车的使用
Session小案例-----简单购物车的使用 同上篇一样,这里的处理请求和页面显示相同用的都是servlet. 功能实现例如以下: 1,显示站点的全部商品 2.用户点击购买后,可以记住用户选择的商品 ...
- SqlDependency缓存数据库表小案例
SqlDependency的简介: SqlDependency是outputcache网页缓存的一个参数,它的作用是指定缓存失效的数据库依赖项,可以具体到数据库和表. SqlDependency能解决 ...
- ch1-vuejs基础入门(hw v-bind v-if v-for v-on v-model 应用组件简介 小案例)
1 hello world 引入vue.min.js 代码: ----2.0+版本 <div id="test"> {{str}} </div> <s ...
- MVC 小案例 -- 信息管理
前几次更新博客都是每次周日晚上到周一,这次是周一晚上开始写,肯定也是有原因的!那就是我的 Tomact 忽然报错,无法启动,错误信息如下!同时我的 win10 也崩了,重启之后连 WIFI 的标志也不 ...
- JSP +MySQL实现网站的登录与注册小案例
为了练手,我就自己试着做了一个网站的登录与注册的小案例.由于没有做美化处理,所以界面并不是很好看. 网站实现的功能如下: 用户首次注册功能 用户登录功能 项目目录展示: 下面我将会分模块展示 注册模块 ...
- Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例
Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的 ...
- 8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署
这一篇继续完善webnotebook,如果你读过上一篇的内容,你应该知道怎么去挂载webnotebook日志和容器的远程访问,但是这些还远不够,webnotebook 总要和一些数据库打交道吧,比如说 ...
- (24/24) webpack小案例--自己动手用webpack构建一个React的开发环境
通过前面的学习,对webpack有了更深的认识,故此节我们就利用前面相关知识自己动手用webpack构建一个React的开发环境,就算是一个小案例吧. 注:此处使用的开发工具是Webstorm. 1. ...
随机推荐
- vue使用技巧:Promise + async + await 解决组件间串行编程问题
业务场景描述 大家都通过互联网投递过简历,比如在智联.58.猎聘等平台.投递心仪的职位前一般都需要前提创建一份简历,简历编辑界面常规的布局最上面是用户的个人基本信息,如姓名.性别.年龄.名族等,接着是 ...
- cocos-js 精灵移动转圈
cc.Class({ extends: cc.Component, properties: { carModel: { default: null, type: cc.Sprite }, bgMode ...
- Servlet快速入门:第一个Servlet程序
Servlet是整个JavaWeb开发的核心,同时也是一套规范,即公共接口.用于处理客户端发来的请求并作出响应.通常情况下我们会发送不同的请求并交由不同的处理程序来处理,例如处理用户信息和处理订单信息 ...
- c# 定义和调用索引器
- Linux之virtualenv和virtualenvwrapper
一,介绍 在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题:亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难.此时,我们需要对于不同的工 ...
- Python面向对象Day1
一.面向对象初始 面向过程变成属于流水式 面向对象是一种思想 结构上理解面向对象:两部分 class A: # 类 name = '小明' # 静态属性,静态变量,静态字段,或者属性.变量.字段 de ...
- Java学习笔记——第3篇
面向对象 结构化程序的任何一个结构都具有唯一的入口和唯一的出口,并且程序不会出现死循环. 虽然Java是面向对象的,但Java的方法里则是一种结构化的程序流. 面向对象的基本思想:类.对象.继承.封装 ...
- ElasticSearch 连载一 基础入门
ElasticSearch简写ES,ES是一个高扩展.开源的全文检索和分析引擎,它可以准实时地快速存储.搜索.分析海量的数据. 应用场景 我们常见的商城商品的搜索 日志分析系统(ELK) 基于大量数据 ...
- ResNet网络的Pytorch实现
1.文章原文地址 Deep Residual Learning for Image Recognition 2.文章摘要 神经网络的层次越深越难训练.我们提出了一个残差学习框架来简化网络的训练,这些 ...
- 《Hello--world团队》第三次作业:团队项目的原型设计
项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验七 团队作业3:团队项目原型设计与开发 团队名称 <hello--world团 ...