网盘下载地址:
链接: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"});
原文:https://www.cnblogs.com/wanglichaoya/p/11547778.html