Spring&MVC应用----第三章

Spring注解


前言

本章知识点难以理解,可结合第一/二章作业食用。


知识点

传统的 Spring 做法是使用.xml 文件来对 bean 进行诸如或者是配置 aop、事务,这么做有两个缺点:

  • 如果所有的内容都配置在 xml 文件中,那么 xml 文件将会十分庞大;如果按需求分开 xml 文件,那么
    xml 文件又会非常多。总之这将导致配置文件的可读性和可维护性变得很低。
  • 在开发中在.java 文件和.xml 文件之间不断切换,是一件非常麻烦的事,同时这种思维上的不连贯也会
    降低开发的效率。
    为了解决这两个问题, Spring 引入了注解,通过“ @XXX”的方式,让注解与 Java Bean 紧密结合,既大大减少了配置文件的体积,又增加了 Java Bean 的可读性和内聚性

例中用一个叫做 p1 的空方法来表示一个切入点,当希望将通知织入该切入点时,在注解中用方
法签名来代替切入点表达式即可。由于切入点的声明和通知的声明在同一个类中,可以省略包路径和类名。

食材

使用注解的方式重构第二章的 AOP 案例。
实现步骤:
1) 创建 Web 项目 phoneannotation,并导入 jar 包
在这里插入图片描述
2) 在 src 下创建 com.ysd.test 包,并在其中创建 PhoneBiz 接口、 PhoneBizImpl 实现类、 Test 测试类和 LogAspect切面类。

package com.test;
public interface PhoneBiz {
public void buyPhone(int num);//购买手机
public void salePhone(int num);//销售手机
}
package com.test;
public class PhoneBizImpl implements PhoneBiz {
public void buyPhone(int num) {
System.out.println("手机进货,进货数量为"+num+"部");
}
public void salePhone(int num) {
System.out.println("销售手机,销售数量为"+num+"部");
}
}
}
package com.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext context= new
ClassPathXmlApplicationContext("applicationContext.xml");
PhoneBiz phoneBiz = (PhoneBiz) context.getBean("phoneBiz");
phoneBiz.buyPhone(10);
}
}
}
@Aspect // 将该类标记为切面
public class LogAspect {
// 切入点
@Pointcut("execution( void *Phone(int))")
public void p1() {}
// 前置通知,方法执行之前执行
// @Before("com.ysd.test.LogAspect.p1() ")
@Before("p1() ")
public void before(JoinPoint jp) {
Object[] args = jp.getArgs();// 目标方法所有参数
String methodName = jp.getSignature().getName();// 获得目标方法名称
if ("buyPhone".equals(methodName)) {60
System.out.println(currentTime() + "即将执行进货操作,数量为" + args[0]);
}
if ("salePhone".equals(methodName)) {
System.out.println(currentTime() + "即将执行销售操作,数量为" + args[0]);
}
}
// 省略其它方法
}

3) 在 src 下创建 applicationContext.xml,并输入以下代码:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
<!-- 启用注解配置 -->
<aop:aspectj-autoproxy />
<!-- 目标业务对象 -->
<bean id="phoneBiz" class="com.ysd.test.PhoneBizImpl"></bean>
<!-- 日志管理切面 -->
<bean class="com.ysd.test.LogAspect"></bean>
</beans>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值