Spring框架学习

 1.注解开发:

 常用注解 :

 @Controller 用于控制层 web层, @Repository 用于持久层 dao层,@Transactional(readOnly = true) 注解事物控制,隔离级别最低的。只读用于service的实现类上。@Comonponent 注解中立的类上。

@Resource 注入bean用,默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入;

@Transactional(readOnly = false)在方法上使用表示事务可读写。

2.AOP:

  用途:权限,事务,日志都可以用到。

  即面向切面编程。

  对哪些方法进行拦截,拦截进行怎样处理。

  spring中AOP的代理由spring的IOC容器负责生成、管理,其依赖关系也由IOC容器来负责管理;

  是其实是通过动态代理来实现业务逻辑的插入,是开发者在开发是不用关注其他与业务无关的点,通过代理的方式做到了插拔式操作。

    就是关注

  它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为“Aspect”切面。所谓切面,简单来说就是那些与业务不相关,却为业务模块所共同调用的逻辑或责任封装起来,以便减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

  

3.IOC:

  控制反转,DI其实就是IOC的另外一种说法。

  理解:对于spring框架来说,就是由spring来控制对象的生命周期和对象间的关系;在系统运行中动态的向某个对象提供他所需要的对象,这一点是通过DI(依赖注入)实现的;DI是如何实现的呢,在Java1.3之后一个重要的特征就是反射,它允许程序在运行的时候动态的生成对象,执行对象的方法,改变对象的属性,spring就是通过反射来实现注入的。

  IoC其实是遵循了软件设计理念的依赖倒转原则,面向对象的设计就是为了实现软件的更好的复用行和扩展性,我们就必须降低我们每个pojo(实体类)的依赖关系,也就是解耦,耦合度低了,我们才能更好的重用和扩展。

   引入IOC的目的:

  (1):脱开,降低类之间的耦合;

  (2):倡导面向接口编程,实施依赖倒换原则;

  (3):提供系统可插入,可测试,可修改等功能。

  具体做法:

  (1):将bean之间的依赖关系尽可能转换为关联关系;

  (2):将对具体类的关联尽可能转化为对interface 的关联,而不是与具体的服务对象相关联;

  (3):

4.事务:

  一、首先配置tx标签

  二、配置数据库连接池

  三、使用@Transactional注解来配置事务。

      参数名称:readOnly  设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认为false。

              rollbackFor 当方法中抛出指定的异常(一个或多个),则进行事务回滚。

           noRollbackFor 当方法中抛出指定的异常(一个或多个),则不进行事务回滚。

              propagation 用于设置事务的传播行为。

           isolation 用于设置底层数据库的事务隔离级别,通常选用数据库的默认隔离级别,基本不需要进行配置。

              timeout 用于设置事务的超时秒数。

      注意:       @Transactional只能用在public修饰的类或方法上,用其他的不会报错但没有事务功能。 

             建议在实现类上使用@Transactional注解,而不要使用在接口上,因为注解是不能被继承的。

             其实正是 <tx:annotation-driven/>元素的出现 开启 了事务行为。

  事务的隔离级别:

    脏读:一个事务读取另一个事务未提交数据。

    不可重复读:在一个事务中,多次读取同一返回的结果有所不同,换句话说,后读取可以读到另一事务已提交的更新数据,相反,“可重复读”在同一事务中多次读取数据,能够保证读取数据一样,也就是后读取可以读取另一事务已提交数据。

    幻读:一个事务读取另一个事务insert数据。

  

5.依赖注入(DI):

  用@Resource注入bean。

  自定义的bean会在第一次访问的时候实例化,在没有注入的情况下是不会实例化的。

  事务管理器没有注入实在什么时候注入的:一般是在启动Web容器时,自动装配ApplicationContext的配置信息。

  所谓依赖注入通常是指在运行期,由Spring容器动态地将对象注入到应用中、当spring容器启动后,创建并管理bean对象,以及销毁它。应用本身是不负责依赖对象的创建以及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到spring容器。控制权的转移就是所谓的反转。所以,我们常常看到IOC翻译为“控制反转”,但大多数人都习惯将它成为“依赖注入”。

  利用Java 的反射机制,spring还充当了工厂的角色,我们不需要自己建立工厂类。Spring的工厂类会帮我们完成配置文件的读取、利用反射机制注入对象等工作,我们可以通过bean的名称获取对应的对象。

  依赖注入的三种方式:

  一、set注入

  二、构造器注入

  三、静态工厂的方式注入

原文地址:https://www.cnblogs.com/ycmxm/p/6943432.html