spring实验2
实验二SpringAOP的使用
实验目的:
- 了解AOP的概念和作用
- 理解AOP中的切面以及通知
- 熟悉Spring中两种动态代理方式的区别
- 掌握基于代理类的AOP实现
实验类型:
验证性
实验学时:
2学时
实验内容:
实验任务1:创建项目,导入相关依赖
<dependencies>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<!--spring包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.13</version>
</dependency>
</dependencies>
实验任务2:创建目标接口和实现类
public interface UserDao {
public void addUser();
public void deleteUser();
}
public interface ScoreDao {
public void addScore();
public void deleteScore();
}
public interface StudentDao {
public void addStudent();
public void deleteStudent();
}
@Repository("scoreDao")
public class ScoreDapImpl implements ScoreDao {
public void addScore() {
System.out.println("添加成绩");
}
public void deleteScore() {
System.out.println("====成绩管理模块:删除成绩====");
}
}
@Repository("studetnDao")
public class StudentDaoImpl implements StudentDao {
public void addStudent() {
System.out.println("添加学生信息");
}
public void deleteStudent() {
System.out.println("====学生管理模块:删除学生信息====");
}
}
@Repository("userDao")
public class UserDaoImpl implements UserDao {
public void addUser() {
System.out.println("添加用户");
}
public void deleteUser() {
System.out.println("====用户管理模块:删除用户====");
}
}
实验任务3:创建切面类
public class MyAspect{
public void before(){
System.out.println("方法执行前");
}
public void after(){
System.out.println("方法执行后");
}
}
实验任务4:更改spring配置文件
<!--目标-->
<bean id="userDao" class="com.hxci.aop.UserDaoImpl"/>
<bean id="scoreDao" class="com.hxci.aop.ScoreDapImpl"/>
<bean id="studentDao" class="com.hxci.aop.StudentDaoImpl"/>
<!--切面-->
<bean id="myAspect" class="com.hxci.bean.MyAspect"/>
<!--代理-->
<aop:config>
<!--自定义切面 ref要引用的类-->
<aop:aspect ref="myAspect">
<!--切入点-->
<aop:pointcut id="point" expression="execution(* com.hxci.aop.UserDaoImpl.*(..))"/>
<!--通知-->
<aop:before method="before" pointcut-ref="point"/>
<aop:after method="after" pointcut-ref="point"/>
</aop:aspect>
</aop:config>
实验任务5:编写测试类,进行测试
public class TestXml {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//1.从spring容器获得内容
UserDao userDao=context.getBean("userDao",UserDao.class);
//2.执行方法
userDao.deleteUser();
}
}
总结:AOP是面向切面编程主要用于记录日志。