Spring框架中都用到了哪些设计模式?
1.工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例
2.单例模式:Bean默认为单例模式
3.代理模式:SpringAOP功能用到了JDK的动态代理和CCGLIB字节码生成技术
4.模板方法:用来解决代码重复的问题
5.观察者模式:定义对象建一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会被通知强制更新
注解的原理
注解本质上是一个继承了Annotation的特殊接口,其具体实现类是java运行是生成的动态代理类,当通过反射获取注解时,返回的java运行时生成的动态代理对象,通过代理对象调用自定义注解的方法,最终会调用AnnotationInvocationHandle的invoke方法。该方法会从memberValues这个map中索引出对应的值。而memberValues的来源是java常量池。
SpingJDBC与传统的JDBC有什么区别?
Spring的JDBC是在原生态的JDBC上面进行的一次简单的封装,提供了一些接口,节省代码,不管连接、不管事务、不管异常、不管关闭。只需要实现Spring提供的回调类。传统的JDBC执行过程如下
1.创建连接
2.创建sql语句
3.执行sql语句
4.返回结果
5.关闭资源
在SpringJDBC中只需要实现2、4就可以了,其他都由Spring完成,,而2、4都是通过实现指定的接口,然后将实现类传递给Spring句完成了
什么是面向切面编程?
针对业务处理过程中的切面进行提取,他所面对的是处理过程中的某个步骤或者阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果
为了降低java的开发的复杂性,Spring采取了一下四种关键策略?
1.通过POJO的轻量级和最小侵入性编程
2.通过依赖注入和面向接口实现松耦合
3.给予切面个管理进行声明式编程
4.通过切面和模板减少样板式代码
Spring切面亏应用五种类型的通知?
1.Before
2.After
3.After-returning
4.After-throwing
5.Around
Spring提供的四种各具特色的AOP支持
1.给予代理的经典的AOP
2.@AspectJ注解驱动切面
3.纯POJO切面
4.注入式AspectJ切面(适合Spring的各个版本)
声明式事务管理的事务属性有一下五种?
1.传播行为:传播行为定义了客户端与被调用方法之间的事务边界
2.隔离级别:隔离级别定义了一个事务可能受其他并发事务影响的程度
3.只读:表明事务是否式只读的
4.事务超时:指定事务运行的最长时间,超时就会回滚
5.回滚规则:定义了哪些异常会导致事务回滚哪些不会
脏读、不可重复读和幻读分别式什么意思?
脏读:一个事务读取了另一个事务改写但是未提交的数据时。如果改写在稍后被回滚了,那么第一个事务获取的数据就是无效的
不可重复读:一个事务执行相同的查询两次或者两次以上,但是每次都得到不同 数据。通常是因为另一个并发事务在两次查询期间更新了数据
幻读:一个事务读取了几行数据,接着另一个并发事务插入了一些数据,在随后的查询中,第一个事务发现多了一些更本不存在的数据
Spring注解说明?
采用扫描的方式配置SpringXMl书写方式
<context:component-scanbase-package="包名"/>
@Service:用于标注业务层组件
@Controller用于标注控制层组件
@Component 泛指组件,用于不明确的类
@Repository用户标注数据库访问组件
@PostConstruct创建对象时执行的方法
@PreDestory对象摧毁时执行的方法
@Autowired直接访问私有属性,直接给私有属性输入值