Spring
myllxy
欢迎关注知乎专栏:https://www.zhihu.com/column/c_1274036496291827712
展开
-
Spring中@Transactional的理解其一
@Transactional的本质是动态代理,会为打了@Transactional注解的方法所在的类动态生成代理类,并且在原方法的前后植入事务。我们在代码层面还是调用的原方法,只是在编译期的时候原来那个类会被替换成动态代理类,我们调的是新生成的动态代理类,但是这个过程我们感觉不出来,在我们的眼里只是加了个@Transactional就完成了事务。所以,只要程序在运行期间执行的是代理类,那么一般是不会有问题的,但是如下代码就会有问题了:// 没有事务的方法去调用有事务的方法public Employe原创 2020-08-02 23:35:30 · 343 阅读 · 0 评论 -
Spring生命周期简介与具体应用
Spring对Bean进行实例化(相当于程序中的new Xx())Spring将值和Bean的引用注入进Bean对应的属性中如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()方法(实现BeanNameAware主要是为了通过Bean的引用来获得Bean的ID,一般业务中是很少有用到Bean的ID的)如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanDactory(BeanFactory bf)方法并把..原创 2020-07-15 15:52:03 · 404 阅读 · 0 评论 -
Spring下单例模式与线程安全
我们知道spring中的bean默认都是单例的在AbstractBeanFactory中,有一个doGetBean方法,它会返回系统中会用到的所有的bean,无论是单例(时就从缓存中取),如果是Prototype(是就重新创建一个新的bean),并且针对是否创建bean都会有一个判断: if (mbd.isSingleton()) { /* 从缓存中取 */ sharedInstance = getSingleton(beanName, () -> {}); }原创 2020-07-14 18:20:16 · 3023 阅读 · 0 评论 -
filter过滤器注入bean实例时注入失败null
其实Spring中,web应用启动的顺序是:listener->filter->servlet,先初始化listener,然后再来就filter的初始化,再接着才到我们的dispathServlet的初始化,因此,当我们需要在filter里注入一个注解的bean时,就会注入失败,因为filter初始化时,注解的bean还没初始化,没法注入。使用:方式一@Componentpublic class SpringContextUtils implements ApplicationConte原创 2020-07-06 00:26:59 · 629 阅读 · 0 评论 -
Spring中如何拿到request
比如我在service层方法中想要拿到request对象,可以通过controller层来传递,这是一种方法,还有就是RequestContextHolder:/** * Holder class to expose the web request in the form of a thread-bound * {@link RequestAttributes} object. The request will be inherited * by any child threads spawned原创 2020-05-13 15:20:57 · 453 阅读 · 0 评论 -
Spring - (9) Java注解配置
spring推出Java注解配置以替代xml的方式来进行开发,也就是说平时使用的xml其中的诸如事务数据源这些配置都可以放到一个Java类中来实现,而这个Java类我们只需要加上 @Configuration 注解就可以了我们来分析一下和xml具体有哪些区别与联系:1.创建Bean的方式如果是xml配置:你可以选择在Java类上加个@Component等注解,然后配置扫描包就能实现bean...原创 2020-02-10 14:52:22 · 174 阅读 · 0 评论 -
Spring - (8) JdbcTemplate
概述环境准备持久化操作使用具名参数的JdbcTemplate使用JdbcTemplate实现Dao原创 2019-10-16 17:25:38 · 118 阅读 · 0 评论 -
Spring - (7) 以XML方式配置切面
概述除了使用AspectJ注解声明切面,还支持XML直接在配置文件中声明切面XML声明切面是Spring独有的配置细节所有AOP配置都必须在 <aop:config> 这个标签内XML方式不能自动创建bean,注解方式可以是因为它已经标识为组件了声明切入点切入点可以配置在 <aop:config> 中,也可以配置在切面 <aop:aspec...原创 2019-10-15 19:24:33 · 355 阅读 · 0 评论 -
Spring - (6) AOP细节
一.切入点表达式通过表达式的方式定位一个或多个具体的连接点。1.切入点表达式的语法格式语法:execution([权限修饰符] [返回值类型] [简单类名/全类名] [方法名]([参数列表]))2.举例说明以下四个通配符的作用*:所有访问权限,所有返回值*:当前包下所有类*:当前类中所有方法.. 不限参数类型注意:在AspectJ中,切入点表达式可以通过 “&&...原创 2019-10-15 00:03:29 · 187 阅读 · 0 评论 -
Spring - (5) AOP概述
AOP概述1.是对传统OOP编程的一种补充2.切面是一个可以自定义的特殊的类,里面封装了一系列横切关注点3.因为可以设置横切关注点的运行地点和运行方式,所以可以将这些横切关注点统一用一个类管理,这个类就叫做切面,切面负责将横切关注点模块化优点:1.将非核心代码写在一个类,核心代码写在一个类,降低耦合性2.各个模块更加整洁清晰,便于管理AOP术语横切关注点:从每个方法中抽取出...原创 2019-10-14 23:01:25 · 537 阅读 · 0 评论 -
Spring - (4) AOP前奏:代理模式
一.情景再现数学计算器 :①执行加减乘除运算②日志:在程序执行期间追踪正在发生的活动③验证:希望计算器只能处理正数的运算问题:①代码混乱:越来越多的非业务需求(日志和验证等)加入后,原有的业务方法急剧膨胀。每个方法在处理核心逻辑的同时还必须兼顾其他多个关注点。②代码分散: 以日志需求为例,只是为了满足这个单一需求,就不得不在多个模块(方法)里多次重复相同的日志代码。如果日志需...原创 2019-10-12 19:38:11 · 201 阅读 · 0 评论 -
Spring - (3) 基于注解的方式配置bean
前沿根据前面所学的知识,我们已经知道,可以通过xml的方式配置bean,如下所示:但有时这种方式会显得很繁琐,过多的配置会让我们焦头烂额:相对于XML方式而言,通过注解的方式配置bean更加简洁和优雅,而且和MVC组件化开发的理念十分契合,是开发中常用的使用方式。基于注解配置bean使用注解标识组件普通组件:@Component持久化层组件:@Repository业务逻辑层...原创 2019-09-21 11:13:17 · 221 阅读 · 0 评论 -
Spring - (2) bean属性赋值
一.依赖注入的方式1.通过bean的setXxx()方法赋值2.通过bean的构造器赋值Spring自动匹配合适的构造器通过索引值指定参数位置通过类型区分重载的构造器xml中构造器参数的配置会自动找寻Java代码中构造器最后出现且符合要求的构造器二.p名称空间为了简化XML文件的配置,越来越多的XML文件采用属性而非子元素配置信息。Spring从2.5版本开始引入了一个新的p命...原创 2019-09-14 14:59:20 · 863 阅读 · 0 评论 -
Spring - (1) 创建对象
(1) 目标:使用Spring创建对象,为属性赋值(2) 创建Demo类package cn.nsu.myllxy.spring;/** * @author nsu_zk * @create 2019-09-06 11:27 */public class Demo { private String a; public String getA() { ...原创 2019-09-07 22:26:23 · 121 阅读 · 0 评论