java高级与sping的学习
今天学得挺杂的 1.java封装:javabean,减少耦合、隐藏信息、通过接口访问该类的代码和数据。 2.spring bean spring的ioc容器:先创建容器,然后刷新容器,通过反射生成bean,交给容器管理,通过注解等方式将bean依赖注入到需要改bean的bean中,完成bean间的相互依赖。3.springboot启动流程:有两个支线,不过最终的作用都是将bean交给容器管理。首先是创建springbootapplicatin的实例,判断应用是不是web应用,然后根据应用类型创建ioc容器。接着刷新容器进行容器的初始化。这个过程开启两个支线,一个是自己项目中的bean生成与依赖注入,一个是自动装配:第三方依赖库中的bean的生成与注入,这两都是为是容器初始化。这期间还会有一个将生成的bean动态代理的过程:给用到AOP的bean生成动态代理对象,项目中的bean是目标对象,只做核心业务,动态代理对象可以在核心业务前中后执行自己编写封装的代码,这就是切面的原理。bean生成、依赖注入与bean的动态代理生成都完成后就开始下一步提示应用可以开始了,然后启动内置的服务器,应用启动完成。 4.springweb的拦截器:作用是拦截web请求的接收与响应,是作用于Http层面上的。可以实现全局的登录鉴权等。在权限校验场景下,常用做法是结合拦截器和自定义注解实现:先自定义一个注解,里面定义权限码,在后面的权限校验中用来与前端请求中的用户态进行比对。第二部,创建拦截器,实现HandlerInterceptor接口,编写preHandle等被拦截的控制层方法执行前中后需要做的逻辑。这里权限校验是请求前要实现的逻辑,使用preHandle。然后重写preHandle方法,先判断是否为Controller方法,是就接着获取方法上的自己定义的注解,或springboot封装的注解如@事务,无注解的方法返回true,表示放行,不对该方法做权限控制。这里是权限校验,所以是获取方法上自定义的注解。接着获取当前用户,并校验权限:从Session/token中获取用户信息,然后与该方法上自定义注解里的权限值进行比对,相同则有权限,放行。不同则无权限,拦截。接着别忘了注册该拦截器,在实现了WebMvcConfigurer的类中添加刚才创建的拦截器,并写上拦截什么请求和放行不需拦截的路径。最后就是在Controller 中使用了:在需要特定权限才能执行的方法标上刚才的自定义注解,里面写上该方法需要的权限。 5.AOP实现:先创建一个切面类标上@Aspect@Componen注解表明这是一个切面。然后写一个切入点(PointCut):由@Pointcut注解定义“在何处”进行拦截。接着就是写切面逻辑了。可以用通知(Advice):描述“何时”和“做什么”,如@Around(环绕)。在逻辑方法上标上通知注解,这里选择@Around,它可以完全控制目标方法的执行。在@Around注解中传入刚才写好的切入点。然后编写好方法中的切入逻辑就完成了。AOP可以完成Service层方法级的日志、事务、性能监控。至于底层比拦截器多用到了动态代理的机制。要注意同类方法调用因为不经过动态代理而使AOP失效的问题,可以通过将方法抽离到另外的类中避免失效,也有助于业务代码分层,易于维护。 从反射、动态代理到 IOC/DI,再到启动流程和自动装配,已经把 Spring 的底层脉络完全打通啦! 6.网络编程:TCP协议网络通信:socket套接字用于网络通信:服务器创建servicersocket调用accept()方法,监听客户端的连接。客服端创建socket,连接指定服务器(主机加端口)。服务器监听到连接生成一个socket对象用于服务器与客户端的通信,客户端生成一个socket对象与服务器进行通信。服务器与客户端间有两个数据流,通过socket对象进行读写操作。因为TCP是双向通信,所以socket可以同时发送和接收信息。
