SpringTest与Junit的完美的集合
优点:可以不用每次测试的时候进行创建spring的容器,而且进行持久层的测试的完毕的时候可以回滚已经测试的数据,不会对数据库造成影响。还有很多的优点,可以自己慢慢研究。
导入的jar包:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.3.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
在测试类中进行注解的配置
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
/**
* @author kiosk
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:springAOP.xml")
public class TestUserDao {
@Resource(type = UserDao.class)
private UserDao userDao;
@Test
public void test1() {
userDao.delete();
userDao.insert();
}
}
SprinAOP利用xml文件实现
接口
public interface UserDao {
void insert();
void update();
void delete();
void select();
}
实现类
public class UserDaoImpl implements UserDao {
public void insert() {
System.out.println("插入");
}
public void update() {
System.out.println("修改");
}
public void delete() {
System.out.println("删除");
}
public void select() {
System.out.println("查询");
}
}
切面类:
public class MyAspectXML {
public void checkPri(){
System.out.println("权限校验=======");
}
}
xml文件配置
<!--配置目标类-->
<bean id="UserDaoImpl" class="com.aop.demo.UserDaoImpl"/>
<!--配置代理类-->
<bean id="MyAspectXML" class="com.aop.demo.MyAspectXML"/>
<!--AOP的配置-->
<aop:config>
<!--配置表达式 * 代表的是任意的返回值,..代表的是任意的参数-->
<aop:pointcut id="pointCut1" expression="execution(* com.aop.demo.UserDaoImpl.insert(..))"/>
<!--配置切面-->
<aop:aspect id="aspect" ref="MyAspectXML">
<!--配置前置的通知-->
<aop:before method="checkPri" pointcut-ref="pointCut1"/>
</aop:aspect>
</aop:config>
Spring的通知类型
(1)前置通知(目标方法执行之前)
(2)后置通知(目标方法执行之后)
/**
* 参数为切点的返回值
* @param result
*/
public void writeLog(Object result){
System.out.println("日志记录完成");
}
<aop:after-returning method="writeLog" pointcut-ref="pointCut2" returning="result"/>
(3)环绕通知(目标方法的前后)
(4)异常抛出通知(程序出现异常的时候执行的操作,例如:在异常的时候进行回滚)
(5)最终通知(无论代码是否有异常,都会执行)
切面类
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
public class MyAspectXML {
public void checkPri(JoinPoint joinpoint){
System.out.println("权限校验=======" + joinpoint);
}
/**
* 参数为切点的返回值
* @param result
*/
public void writeLog(Object result){
System.out.println("日志记录完成");
}
public Object monitor(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("环绕前");
Object object = joinPoint.proceed();
System.out.println("环绕后");
return object;
}
public void afterThrowing(Throwable exception){
System.out.println("异常抛出通知" + exception.getMessage() );
}
/**
* 相当于是finally
*/
public void after(){
System.out.println("最终通知");
}
}
xml的配置的文件
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--配置目标类-->
<bean id="UserDaoImpl" class="com.westos.demo.UserDaoImpl"/>
<!--配置代理类-->
<bean id="MyAspectXML" class="com.westos.demo.MyAspectXML"/>
<!--AOP的配置-->
<aop:config>
<!--配置表达式 * 代表的是任意的返回值,..代表的是任意的参数-->
<aop:pointcut id="pointCut1" expression="execution(* com.westos.demo.UserDaoImpl.insert(..))"/>
<aop:pointcut id="pointCut2" expression="execution(* com.westos.demo.UserDaoImpl.delete(..))"/>
<aop:pointcut id="pointCut3" expression="execution(* com.westos.demo.UserDaoImpl.update(..))"/>
<aop:pointcut id="pointCut4" expression="execution(* com.westos.demo.UserDaoImpl.select(..))"/>
<!--配置切面-->
<aop:aspect ref="MyAspectXML">
<!--配置前置的通知-->
<aop:before method="checkPri" pointcut-ref="pointCut1"/>
<!--配置后置通知-->
<aop:after-returning method="writeLog" pointcut-ref="pointCut2" returning="result"/>
<!--配置环绕通知-->
<aop:around method="monitor" pointcut-ref="pointCut3" />
<!--配置异常抛出通知-->
<aop:after-throwing method="afterThrowing" pointcut-ref="pointCut4" throwing="exception"/>
<!--配置最终通知-->
<aop:after method="after" pointcut-ref="pointCut4"/>
</aop:aspect>
</aop:config>
</beans>