学习Spring 、Spring MVC 、MyBatis框架的笔记

一:遇到的问题及其解决过程:    

1、在学习Spring MVC框架时,遇到采用注解方式定义Controller这一点时,对于注解@RequestMapping这一点比较混乱。

解决:通过在B站看学习视频 ,我知道了当@RequestMapping标注在方法上时,作为请求处理方法在程序接收到对应的URL请求时被调用。而@RequestMapping也可以放在上时,该类中的所有方法都将映射为相对于类级别的请求,表示控制器所处理的所有请求都被映射到value属性值的指定路径下。

2、在学习MyBatis框架时,对于使用Mapper代理的方法开发DAO,我不是很清楚过程原理。

解决:通过在B站的视频学习以及老师发的笔记资料,我学习到了两者的开发过程和原理,也知道了两者的不同。使用Mapper代理开发DAO,主要是用接口的方法来实现,将很多重复利用的代码例如数据库的配置单独写到一个配置文件中,或是将查询、更改、增加、删除的代码分别写在各自的xml文件中。在使用时,只需调用xml文件便可达到代码的实现。从而使代码更加简洁,便于管理维护。

3、在学习到动态代理这一知识点时,对于老师提供的学习资料中,对于生成代理对象这一块的代码,我没有读懂。

 public class StudentServiceFactory implements InvocationHandler
{
    private StudentService stuService; //被代理的对象
    public StudentServiceFactory(StudentService stuService) {
		super();
		this.stuService = stuService;
	}
    public StudentServiceFactory() {	
	}
//生成代理对象
    public StudentService getStudentService()
    {
     //生成代理对象
    //此方法的第一个参数:生成的代理类必须与被代理类在同一个类加载器中,所以此处调用了被代理对象的类加载器
    //第二个参数:被代理对象所实现接口的字节码数组,被代理对象可能会实现多个接口,本例中的被代理对象只实现了一个接口
    //第三个参数:将实现InvocationHandler接口的类的对象传递进去。
//这个方法会把代理的全部接口用一个由代码动态生成的类实现,将来调用接口中的任何一个方法都会去调用InvocationHandler.invoke()方法。	
StudentService stuService=(StudentService)Proxy.newProxyInstance(StudentServiceFactory.class.getClassLoader(), StudentServiceImp.class.getInterfaces(), this);
        return stuService;
    }
    @Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		//调用业务方法之前需要执行的方法
     startTransaction();
    	Object obj=method.invoke(stuService, args);
    	//调用业务方法之后要执行的方法
stopTransaction();
		return obj;
	}
    //正交的业务逻辑
    private void startTransaction()
    {
    	System.out.println("------开启事务");
}
//正交的业务逻辑
    private void stopTransaction()
    {
    	System.out.println("------关闭事务");
}
}

解决:通过在B站视频的学习,我理解并可以看懂这块代码段  

 public StudentService getStudentService() 
 {

    StudentService stuService
(StudentService)Proxy.newProxyInstance(StudentServiceFactory.class.getClassLoader(), StudentServiceImp.class.getInterfaces(), this);
   return stuService;

    }

以上代码段是使用代理类进行增强,返回的是代理后的对象  。

其中StudentServiceFactory.class是类加载器,StudentServicelmp是被代理对象实现的所有接口。

@Override

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {}

所有动态代理类的方法调用,都交给invoke()方法去处理。

proxy:被代理后的对象。

method:将要被执行的方法信息(反射)。

args:执行方法时需要的参数。

二:启发

在学习了这三种框架之后,对产生的问题进一步的解决后,我更加体会到这三种框架的益处。同时,只有在遇到问题,努力去解决问题才会体会到解决困难后的快乐。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值