最简单的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. ...
随机推荐
- css 垂直方向 margin 边距 重合
1:控制两个相邻边盒子之间的距离,在A或者B盒子上用margin控制,就可以控制距离了. 2:父子级之间的元素,常规文档流中,只要垂直外边距直接接触就会发生合并.比如在写header标签时,想移动he ...
- S3C2440 gpio + main
相关文章:http://blog.csdn.net/zhangxuechao_/article/details/77990854 举例 start.S .globl _start _start: /* ...
- 【SpringMVC】请求乱码处理
一.post请求乱码 二.get请求乱码 一.post请求乱码 在web.xml中加入 <filter> <filter-name>CharacterEncodingFilte ...
- linux运维之路配置网络
前言裸机上装操作系统,想和物理机通信需要设置IP 开机以后: 第一步:setup命令 ——> NetWork configguation ---->Device configurat ...
- CIP 协议安全扫盲
- [ipsec][strongswan] strongswan源码分析--(四)plugin加载优先级原理
前言 如前所述, 我们知道,strongswan以插件功能来提供各种各样的功能.插件之间彼此相互提供功能,同时也有可能提供重复的功能. 这个时候,便需要一个优先级关系,来保证先后加载顺序. 方法 在配 ...
- nginx基础概述
为什么选择nginx nginx非常轻量 互联网公司都选择nginx nginx技术成熟,具备的功能时企业最常用使用而且最需要的 适合当前主流架构趋势,微服务.云架构.中间层 统一技术 ...
- Redis4.0之持久化存储
一,redis概述与实验环境说明 1.1 什么是redis redis是一种内存型的NoSQL数据库,优点是快,常用来做缓存用 redis存储数据的方法是以key-value的形式 value类型 ...
- css完结篇
1.如何让一个绝对定位的盒子居中 left:50%; margin-left:-宽度的一半; 2.固定定位 position:fixed; 1.脱标 参考点:浏览器左上角 作用:固定导航栏,返回顶部, ...
- java UDP 通信:服务端与客服端
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import j ...