Spring之mvc應用(包含aop)
2021-04-04 02:28
标签:ali 切面 mit npoi private location post ice c中 一、使用依賴 1) pom中需要有 2)mvc中配置 3)controller層中添加Handler Spring之mvc應用(包含aop) 标签:ali 切面 mit npoi private location post ice c中 原文地址:https://www.cnblogs.com/sabertobih/p/13442050.html
二、目錄三、spring-mvc.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:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
">
context:component-scan base-package="control"/>
context:annotation-config/>
mvc:annotation-driven/>
bean class="com.fasterxml.jackson.databind.ObjectMapper"/>
aop:aspectj-autoproxy/>
beans>spring-mybatis.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: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
">
context:component-scan base-package="model"/>
context:annotation-config/>
context:property-placeholder location="classpath:datasource.properties"/>
bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
property name="driverClassName" value="${mysql.driver}"/>
property name="url" value="${mysql.url}"/>
property name="username" value="${mysql.username}"/>
property name="password" value="${mysql.password}"/>
bean>
bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
property name="dataSource" ref="dataSource"/>
bean>
bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
property name="dataSource" ref="dataSource"/>
property name="typeAliasesPackage" value="entity"/>
property name="mapperLocations" value="classpath:mapping/*Mapper.xml"/>
bean>
bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
property name="basePackage" value="model.mapper"/>
bean>
beans>
四、Service中:
@Service
public class StudentService{
@Autowired
private StudentMapper sm;
control中:
package control;
import entity.StudentInfo;
import model.service.StudentService;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import pageutil.Result;
import java.sql.SQLException;
@CrossOrigin // 跨域訪問,結合RestController一起用,Rest代表ajax,前後端分離
@RestController // 如果只是jsp頁面訪問,使用Controller就行了
public class StudentControl{
@Autowired
private StudentService ss;
/**
*
* 事务: 应用场景:多条修改级语句共同完成一个业务
* 事务特性:原子性,隔离性,一致性
* 隔离级别 isolation = Isolation.READ_COMMITTED
* 超时:timeout = int (second)
* 开始事务,提交事务,回滚事务
* spring框架:propagation = Propagation.REQUIRED (默认值:有事务则用,无则加事务)
* 回滚机制:rollbackFor = 异常类型:SqlException.class
* @param stu
* @return
*/
@PostMapping("/as.do")
// 如果超過10秒就回滾,如果出現sql異常就回滾
@Transactional(timeout = 10,rollbackFor = SQLException.class)
public Result addStu(StudentInfo stu) {
return ss.addStu(stu);
}
@GetMapping("/rs.do")
public Result removeStu(int sid) {
return ss.removeStu(sid);
}
@GetMapping("/msf.do")
public Result modifyStuFind(int sid) {
return ss.modifyStuFind(sid);
}
@PostMapping("/ms.do")
public Result modifyStu(StudentInfo stu) {
return ss.modifyStu(stu);
}
@GetMapping("/fsp.do")
// 查詢操作,只讀不改
@Transactional(readOnly = true)
public Result findStu(int pageNo) {
final int pageSize = 5;
return ss.findStu(pageNo, pageSize);
}
}五、如何添加AOP?
aspect-runtime:aspectjrt &&
aspect-weaver:aspectjweaver
package control;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import pageutil.Result;
@Component
@Aspect
public class ControlLogAspectHandler {
private static Logger logger = Logger.getLogger(ControlLogAspectHandler.class);
@Autowired
private ObjectMapper mapper;
// 在哪裏做: *表示返回類型;control包下的以Control結尾的類的*方法名的無參或多個參數的方法
@Pointcut(value = "execution(* control.*Control.*(..))")
public void pointcut(){}
private StringBuilder parse(JoinPoint jp) throws JsonProcessingException {
StringBuilder builder = new StringBuilder();
String t = jp.getTarget().getClass().getName();
String m = jp.getSignature().getName();
Object[] r = jp.getArgs();
builder.append(t);
builder.append(".");
builder.append(m);
builder.append("(");
builder.append(mapper.writeValueAsString(r));
builder.append(")");
return builder;
}
// 做什麽
@AfterReturning(value = "pointcut()",returning = "rtn")
public void afterReturning(JoinPoint jp, Result rtn) throws JsonProcessingException {
StringBuilder builder = parse(jp);
builder.append(" RETURN ");
builder.append(mapper.writeValueAsString(rtn));
logger.info(builder.toString());
}
@AfterThrowing(value = "pointcut()",throwing = "ex")
public void afterThrowing(JoinPoint jp,Exception ex){
try {
StringBuilder builder = parse(jp);
builder.append(" THROW ");
builder.append(ex.toString());
logger.error(builder.toString());
} catch (JsonProcessingException e) {
logger.error(e.getMessage());
}
}
}
下一篇:shell多线程
文章标题:Spring之mvc應用(包含aop)
文章链接:http://soscw.com/index.php/essay/71916.html