Spring框架:全功能栈的应用程序框架——注解+代理模式+SpringTX

一、Spring的注解方式实现

1、介绍

  • 作用:

    简化XML文件的配置,达到和XML配置完全相同的效果。
  • 缺点:

    耦合性太高。
  • 使用和格式:

    类上/方法上/属性上声明
  • 注意:

    注解和XML配置文件可以同时使用,但是同一个功能只能使用一种方式。

2、使用

注意:SpringAOP的注解方式实现是基于AspectJ方式的,SchemaBased方式是没有的。

  1. 在applicationcontext.xml文件中声明注解的扫描路径
  2. 在扫描路径下的某个功能上使用注解完成功能配置即可。

3、AOP注解

  1. @Component:相当于配置文件的bean标签,将某个类的对象扫描到Spring容器中。

    此注解一般在普通Java类上用。
  2. @Service:相当于配置文件的bean标签,将某个类的对象扫描到Spring容器中。

    此注解专门在业务层实体类上使用来表明该类为业务类。
  3. @pointcut:在切点方法上使用
  4. @Aspect:结合@Component在通知类上使用
  5. @Before/@After/@Around/@AfterThrowing在前置/后置通知方法上声明

    需要在其中声明对应的切点的全限定路径。

注意:需要在Spring的配置文件中声明AOP注解生效。

二、代理设计模式

1、设计模式:

  • 概念:

    设计模式其实就是代码的一种结构的设计思路。
  • 好处:
     

    增加代码健壮性、易修改性、可扩展性

  • 种类:

    建造类设计模式

    结构类设计模式

    行为类设计模式

2、代理设计模式

  • 概念

    将对某个功能的调用以及使用的代码封装起来,避免调用方式以及使用代码的直接暴露。
  • 好处
     

    ①简化代码的使用流程

    ②保护真实的方法的调用方式

  • 种类

    ①静态代理

    ②动态代理

3、静态代理

  • 概念
     

    真实对象:要进行功能扩展的对象

    真实方法:要进行功能扩展的方法

    代理对象:调用真实对象并完成功能扩展的对象。

    代理方法:调用真实方法的扩展方法。

  • 特点
    代理对象和代理方法都是由程序员自己编写。

  • 流程
    在代理对象的代理方法中调用真实对象的真实方法,然后将代理对象和代理方      法对外暴露提供服务。

4、动态代理

  • 特点

    代理对象和代理方法是动态生成的。底层流程和静态代理一致。
  • 种类
     

    ①jdk动态代理(官方提供):

    原则:真实对象和代理对象实现相同的接口。

    ②cglib动态代理(第三方):

    原则:代理对象继承真实对象。

  • JDK代理实现流程

    ①声明接口,并在接口中声明要进行代理的方法。
    ②创建真实对象实现接口,并完成方法的实现。
    ③创建扩展代理的对象,并声明对应的扩展代码。
    ④调用JDK官方的类文件获取动态生产的代理对象。
    ⑤使用代理对象完成功能处理。

  • cglib动态代理实现流程

    ①导入cglib的jar包。
    ②声明真实对象和真实方法。
    ③创建类并声明方法完成扩展代码的声明。
    ④使用Cglib提供的方法获取代理对象。
    ⑤使用代理对象完成功能处理。

5、SpringAOP底层代理设计模式

SpringAOP底层默认使用的JDK动态代理,但是同时也支持cglib动态代理。需要配置Cglib的依赖以及在Spring的配置文件中开启Cglib动态代理。

三、SpringTX

1、介绍

  • 概念
     

    编程式事务:事务管理代码由程序员自己编写。

    声明式事务:事务管理代码由第三方直接提供,程序员直接将其组装到功能中即可。

  • 使用流程
    ①导入jar包
    ②搭建Spring整合Mybatis的项目
    ③在applicationcontext.xml文件中配置事务管理bean(通知bean)
    ④在applicationcontext.xml文件中配置业务层bean
    ⑤在applicationcontext.xml文件中配置事务管理切面(组装规则)
    ⑥正常编写代码完成功能开发。

<!--配置事务管理-->
            <!--配置事务管理bean(通知bean)-->
                <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                    <property name="dataSource" ref="dataSource"></property><!--配置事务管理的数据源-->
                </bean>
            <!--配置具体的事务管理方法:对AOP切点的通配范围的进一步缩减-->
                <tx:advice id="advice" transaction-manager="transactionManager">
                    <tx:attributes>
                        <tx:method name="ins*"/>
                        <tx:method name="del*"/>
                        <tx:method name="up*"/>
                        <tx:method name="sel*"/>
                        <tx:method name="transferAccountService*"/>
                    </tx:attributes>
                </tx:advice>
            <!--配置事务管理切面(组装规则)-->
                <aop:config>
                    <aop:pointcut id="my" expression="execution(* com.*.service.impl.*.*(..))"/>
                    <aop:advisor advice-ref="advice" pointcut-ref="my"></aop:advisor>
                </aop:config>

四、声明式事务中属性解释

  1. name=”” 哪些方法需要有事务控制
  2. readonly=”boolean” 是否是只读事务
  3. propagation 控制事务传播行为
  4.  isolation=”” 事务隔离级别
  5.  rollback-for=”异常类型全限定路径”
  6.  no-rollback-for=”” 当出现什么异常时不滚回事务

五、Spring常用注解

注意:必须在Spring的配置文件中声明注解扫描。

  • @Component:使用在普通java类上
  • @Service:使用在业务层类上
  • @Controller使用在控制层类上,SpringMVC

    作用:声明一个类的对象为bean对象,相当于配置了bean标签

    使用:在SpringMVC的控制器类上使用。
  • @Repository

    作用:声明一个类的对象为bean对象,相当于配置了bean标签

    使用:在数据库功能类上使用。比如Dao层对象
  • @Resource

    作用:替换在配置文件的依赖注入的。

    使用:在有依赖关系的属性上使用,比如A中有B属性,则在B属性上声明,告诉Spring容器对象将B的bean对象注入到A的bean对象中。

    注意:此注解是jdk官方的注解,不是Spring的注解,会先按照byName的方式注入,如果没有则按照byType的方式 继续注入,如果都没有则不注入。并且不需要提供get/set方法
  • @Autowired

    作用:和@Resource相同,都是替换依赖注入的配置的。

    使用:在需要依赖注入的属性上声明

    注意:该注解是Spring官方提供的,默认使用byType.
  • @Value
    作用:用来替换配置文件中的属性注入的。

    使用:在属性上声明,值为${“键名”}

    示例: @Value(${“name”})

    注意:使用此注解的注入,无需提供get/set方法。

六、Spring项目流程总结

  1. 确定项目需求:项目有哪些功能
  2. 确定项目的数据库:根据功能先把数据库设计好,然后再进行代码的编写
  3. 确定开发技术: Spring+MyBatis+Servlet+Jsp+Html+Jquery+Css
  4. 搭建项目开发基板:不考虑功能的编写,把能想到的基础配置先做了
    1. 创建web项目
    2. 在web-inf下创建lib文件夹并导入相关的jar
    3. 在src下创建并配置applicationcontext.xml文件
      • 配置注解扫描路径
      • 配置事务管理切面
      • 配置事务管理的方法
      • 配置事务管理的bean
      • 配置mapper扫描bean
      • 配置工厂bean
      • 配置数据源bean
      • 配置属性配置文件扫描路径
    4. 在webapp下的web-inf下的web.xml文件中配置Spring的配置信息
      1. Spring的配置文件路径
      2. Spring的监听器
    5. 完成功能开发
      1. 在Servlet中使用init方法完成Spring容器资源的初始化加载
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值