网盘下载地址:

链接: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>
&lt;!&ndash; <property name="category" ref="c"></property>&ndash;&gt;
</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 小案例的更多相关文章

  1. 一个简单的Maven小案例

    Maven是一个很好的软件项目管理工具,有了Maven我们不用再费劲的去官网上下载Jar包. Maven的官网地址:http://maven.apache.org/download.cgi 要建立一个 ...

  2. Session小案例-----简单购物车的使用

    Session小案例-----简单购物车的使用 同上篇一样,这里的处理请求和页面显示相同用的都是servlet. 功能实现例如以下: 1,显示站点的全部商品 2.用户点击购买后,可以记住用户选择的商品 ...

  3. SqlDependency缓存数据库表小案例

    SqlDependency的简介: SqlDependency是outputcache网页缓存的一个参数,它的作用是指定缓存失效的数据库依赖项,可以具体到数据库和表. SqlDependency能解决 ...

  4. 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 ...

  5. MVC 小案例 -- 信息管理

    前几次更新博客都是每次周日晚上到周一,这次是周一晚上开始写,肯定也是有原因的!那就是我的 Tomact 忽然报错,无法启动,错误信息如下!同时我的 win10 也崩了,重启之后连 WIFI 的标志也不 ...

  6. JSP +MySQL实现网站的登录与注册小案例

    为了练手,我就自己试着做了一个网站的登录与注册的小案例.由于没有做美化处理,所以界面并不是很好看. 网站实现的功能如下: 用户首次注册功能 用户登录功能 项目目录展示: 下面我将会分模块展示 注册模块 ...

  7. Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例

    Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的 ...

  8. 8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署

    这一篇继续完善webnotebook,如果你读过上一篇的内容,你应该知道怎么去挂载webnotebook日志和容器的远程访问,但是这些还远不够,webnotebook 总要和一些数据库打交道吧,比如说 ...

  9. (24/24) webpack小案例--自己动手用webpack构建一个React的开发环境

    通过前面的学习,对webpack有了更深的认识,故此节我们就利用前面相关知识自己动手用webpack构建一个React的开发环境,就算是一个小案例吧. 注:此处使用的开发工具是Webstorm. 1. ...

随机推荐

  1. element-ui上传一张图片后隐藏上传按钮

    来自:https://github.com/ElemeFE/element/issues/3367#issuecomment-376402380 侵删 el-upload里面绑定一个占位class: ...

  2. C# 水仙花数的实现 数据类型

    //int 和int类型计算得到的结果还是int类型 eg:int a = 371 / 100 % 10.一 371除以100得到的是3,而不是3.71.二 再用3%10,求余为3 namespace ...

  3. Oracle数据库账户口令复杂度-等保测评之身份鉴别

    1.     默认情况下数据库没有启用密码验证函数功能,可通过下面sql查询 SQL> select limit from dba_profiles where RESOURCE_NAME='P ...

  4. 制作win10系统及安装win10系统

    制作win10系统 1.登陆msdn,下载win10系统,打开迅雷下载器,复制完该段代码,直接开始下载,网址:https://msdn.itellyou.cn/ 2.下载软碟通,下载网址:https: ...

  5. linux7 上安装mongodb4.2.1操作步骤

    MongoDB是一个通用的.基于文档的分布式数据库,它是为现代应用程序开发人员和云时代而构建的.没有数据库能让你更有效率. 1.下载需要的软件包https://www.mongodb.com/down ...

  6. HTML的BODY内标签介绍

    一.基本标签 <body> <b>加粗</b> <i>斜体</i> <u>下划线</u> <s>删除线& ...

  7. Python面向对象Day1

    一.面向对象初始 面向过程变成属于流水式 面向对象是一种思想 结构上理解面向对象:两部分 class A: # 类 name = '小明' # 静态属性,静态变量,静态字段,或者属性.变量.字段 de ...

  8. Eclipse安装scala插件

    1.下载插件 http://scala-ide.org/download/current.html ​ 2.将下载的压缩包解压,拷贝到eclipse\dropins目录下 3.启动eclipse,安装 ...

  9. 修改httpd端口

    修改httpd端口 默认httpd端口为80,现在改成800 修改两个地方: 1.修改配置文件httpd.conf listen 把80改成需要的端口 2.修改配置文件httpd-vhosts.con ...

  10. celery 笔记

    参考:https://blog.csdn.net/tichimi3375/article/details/82415412 中文翻译:https://www.celerycn.io/      htt ...