Spring总结

在这里插入图片描述
控制反转(IoC)
IOC 让程序员不再关注怎么去创建对象,而是关注与对象创建之后的操作,把对象的创建、初始化、销毁等工作交给spring容器来做。

面向切面(AOP)
AOP(Aspect Oriented Programming),通常称为面向切面编程。它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。

所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

JDK动态代理
动态代理是通过反射类拿到目标类的接口实现,进行拦截和拓展。

优点:
可以不用实现目标类的接口,直接通过反射拿到目标的方法进行拦截。

缺点:
目标类对象一定要实现接口
操作:
public class ObjectInterceptor implements InvocationHandler {
//目标类
private Object target;
//切面类(这里指事务类)
private MyTransatation myTransatation;
//通过构造器赋值
public ObjectInterceptor(Object target,MyTransatation transaction){
this.target = target;
this.myTransatation = transaction;
}

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{
    //开启事务
    this.myTransatation.before();
    //调用目标类方法
    method.invoke(this.target, args);
    //提交事务
    this.myTransatation.after();
    return null;
}

}

TestUsers测试类
//目标类
Object target =new UsersServiceImpl();
//事务类
MyTransatation myTransatation=new MyTransatation();
ObjectInterceptor proxyObject =new ObjectInterceptor(target, myTransatation);
/三个参数的含义:
* 1、目标类的类加载器
* 2、目标类所有实现的接口
* 3、拦截器
/
IUsersService userService = (IUsersService) Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), proxyObject);
userService.saveUsers();
userService.delete();
Cglib代理
是通过字节码创建子类的方式,并在子类中采用方法拦截拦截父类所有的方法,进行切入。CGLIB可以代理没有接口的类。

优点:
可以代理类和接口,在执行效率比较高

缺点:
虽说在代理执行上效率比较高,但是在创建对象上,要使用字节码来进行创建对象,耗时会比JDK久很多。对于final修饰的方法是无法进行代理的。

操作:
代理类:
public class BookFacadeCglib implements MethodInterceptor {
private Object target;
//业务类对象,供代理方法中进行真正的业务方法调用
//有参构造方法
private MyTransatation transaction;
public BookFacadeCglib(Object target, MyTransatation transaction) {
this.target = target;
this.transaction = transaction;
}
//相当于JDK动态代理中的绑定
public Object getInstance(Object target) {
this.target = target; //给业务对象赋值
Enhancer enhancer = new Enhancer(); //创建加强器,用来创建动态代理类
//为加强器指定要代理的业务类(即:为下面生成的代理类指定父类)
enhancer.setSuperclass(this.target.getClass());
//设置回调:对于代理类上所有方法的调用,都会调用CallBack,而Callback则需要实现
// intercept();//方法进行拦
enhancer.setCallback(this);
// 创建动态代理类对象并返回
return enhancer.create();
}
// 实现回调方法
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
this.transaction.before();
proxy.invokeSuper(obj, args); //调用业务类(父类中)的方法
this.transaction.after();
return null;
}
}
测试类
UsersServiceImpl usi=new UsersServiceImpl();
MyTransatation mt =new MyTransatation();
BookFacadeCglib cglib=new BookFacadeCglib(usi,mt);
UsersServiceImpl usersService=(UsersServiceImpl)cglib.getInstance(usi);
usersService.saveUsers();
usersService.delete ();

此压缩包包含了本毕业设计项目的完整内容,具体包括源代码、毕业论文以及演示PPT模板。 开发语言:Java 框架:SSM(SpringSpring MVC、MyBatis) JDK版本:JDK 1.8 或以上 开发工具:Eclipse 或 IntelliJ IDEA Maven版本:Maven 3.3 或以上 数据库:MySQL 5.7 或以上 项目配置完成后即可运行,若需添加额外功能,可根据需求自行扩展。 运行条件 确保已安装 JDK 1.8 或更高版本,并正确配置 Java 环境变量。 使用 Eclipse 或 IntelliJ IDEA 打开项目,导入 Maven 依赖,确保依赖包下载完成。 配置数据库环境,确保 MySQL 服务正常运行,并导入项目中提供的数据库脚本。 在 IDE 中启动项目,确认所有服务正常运行。 主要功能简述: 请假审批流程:系统支持请假申请的逐级审批,包括班主任审批和院系领导审批(针对超过三天的请假)。学生可以随时查看请假申请的审批进展情况。 请假记录管理:系统记录学生的所有请假记录,包括请假时间、原因、审批状态及审批意见等,供学生和审批人员查询。 学生在线请假:学生可以通过系统在线填写请假申请,包括请假的起止日期和请假原因,并提交给班主任审批。超过三天的请假需经班主任审批后,再由院系领导审批。 出勤信息记录:任课老师可以在线记录学生的上课出勤情况,包括迟到、早退、旷课和请假等状态。 出勤信息查询:学生、任课老师、班主任、院系领导和学校领导均可根据权限查看不同范围的学生上课出勤信息。学生可以查看自己所有学年的出勤信息,任课老师可以查看所教班级的出勤信息,班主任和院系领导可以查看本班或本院系的出勤信息,学校领导可以查看全校的出勤信息。 出勤统计与分析:系统提供出勤统计功能,可以按班级、学期等条件统计学生的出勤情况,帮助管理人员了解学生的出勤状况。 用户管理:系统管理员负责管理所有用户信息,包括学生、任课老师、班主任、院系领导和学校领导的账号创建、权限分配等。 数据维护:管理员可以动态更新和维护系统所需的数据,如学生信息、课程安排、学年安排等,确保系统的正常运行。 系统配置:管理员可以对系统进行配置,如设置数据库连接参数、调整系统参数等,以满足不同的使用需求。 身份验证:系统采用用户名和密码进行身份验证,确保只有授权用户才能访问系统。不同用户类型(学生、任课老师、班主任、院系领导、学校领导、系统管理员)具有不同的操作权限。 权限控制:系统根据用户类型分配不同的操作权限,确保用户只能访问和操作其权限范围内的功能和数据。 数据安全:系统采取多种措施保障数据安全,如数据库加密、访问控制等,防止数据泄露和非法访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值