最简单的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中axios拦截器简单封装
axios.interceptors.response.use( response => { // 如果返回的状态码为200,说明接口请求成功,可以正常拿到数据 // 否则的话抛出错误 if ( ...
- vue-resource发送请求
<!DOCTYPE html> <html> <head> <title>vue-resource</title> <meta cha ...
- CSS和LESS
1.CSS 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS ...
- Linux命令——getent
简介 getent命令帮助用户administrative databases中查找相关信息.administrative databases包括: passwd – can be used to c ...
- 创建yum私有库
简述 在Linux系统中安装软件的方法有三种,分别是rpm软件包安装.yum源安装与源代码编译安装,在用rpm软件包安装软件时会经常出现依赖性问题,导致安装繁琐,用源代码编译安装就更不用说了,相信 ...
- Nginx虚拟主机配置--配置Nginx的主配置文件
单台Nginx WEB服务器同时会配置N个网站,也可称之为配置N个虚拟域名的主机,即多个域名对应同一个80端 口. 每个虚拟主机可以是一个独立网站.可以具有独立域名,同一台物理机上面的虚拟主机相互之间 ...
- 2019-ACM-ICPC-徐州站网络赛- I. query-二维偏序+树状数组
2019-ACM-ICPC-徐州站网络赛- I. query-二维偏序+树状数组 [Problem Description] 给你一个\([1,n]\)的排列,查询\([l,r]\)区间内有多少对 ...
- Linux添加shell(.sh)脚本并添加定时任务
一.添加sheel脚本 1.首先创建一个执行程序:vim a.sh 2.编辑: #!/bin/bash python3 python.py >> test2.log 2>& ...
- 神经网络(1)--Non-linear hypotheses,为什么我们要学习神经网络这种算法来处理non-linear hypotheses
神经网络(1)--No-linear hypotheses 为什么我们已经有了linear regression与logistic regression算法还要来学习神经网络这个另外的算法呢,让我们来 ...
- 生成器调试---send方式
调试 def creat_num(all_num): a, b = 0, 1 current_num = 0 while current_num < all_num: ret = yield a ...