初识Spring框架—以学生信息管理系统为例
实验要求:
- 采用注解的方式完成学生信息的查询和录入操作
- 基于bean的配置和基于annotation的装配方式
- 基于AOP完成日志输出。
实验步骤:
- 在eclipse下创建项目stuManagement
- 添加.jar包
- 在src下创建com.itheima.po.Student接口,添加selectStu()、insertStu()方法
- 在src下创建com.itheima.po.CollegeStudent类,实现Student接口,包含属性:String类型stuNo,stuName和score(Integer)
- 在src下创建com.itheima.aspect.LogAspect切面,定义环绕通知myAround()。
- 在src下创建applicationContext.xml文件,进行文件配置
- 在src下创建com.itheima.test.StuTest类,调用selectStu()、insertStu()方法。
程序代码:
Student接口
public interface Student {
public void selectStu();
public void insertStu();
}
CollegeStudent类
public class CollegeStudent implements Student {
String stuNo;
String stuName;
Integer score;
public String getStuNo() {
return stuNo;
}
public void setStuNo(String stuNo) {
this.stuNo = stuNo;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public Integer getScore() {
return score;
}
public void setScore(Integer score) {
this.score = score;
}
@Override
public void selectStu() {// 查询学生信息
System.out.println("查询学生信息");
}
@Override
public void insertStu() {// 添加学生信息
System.out.println("添加学生信息");
}
}
LogAspect切面类
public class LogAspect implements MethodInterceptor{
@Override
public Object invoke(MethodInvocation mi) throws Throwable {
myAround();
Object obj = mi.proceed();
myAround();
return obj;
}
/**
* 环绕通知
*/
public void myAround() {
System.out.println("环绕通知:模拟事务...");
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 1.目标类 -->
<bean id="stu" class="com.itheima.po.CollegeStudent"/>
<!-- 2.切面类 -->
<bean id="LogAspect" class="com.itheima.aspect.LogAspect"/>
<!-- 3.使用Spring代理工厂定义一个名称为stuProxy的代理对象 -->
<bean id="stuProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- 3.1指定代理实现的接口 -->
<property name="proxyInterfaces" value="com.itheima.po.Student"/>
<!-- 3.2指定目标对象 -->
<property name="target" ref="stu"/>
<!-- 3.3指定切面,植入环绕通知 -->
<property name="interceptorNames" value="LogAspect"/>
<!-- 3.4指定代理方式:cglib代理 -->
<property name="proxyTargetClass" value="true"/>
</bean>
</beans>
StuTest类
public class StuTest {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Student stu = (Student) applicationContext.getBean("stuProxy");
stu.selectStu();
stu.insertStu();
}
}