zoukankan      html  css  js  c++  java
  • Spring

    Spring 中有一个核心容器,这个容器我们通常称之为IOC(Inversion of Control)容器,这个容器最核心功能就是控制反转.这个容器负责对象的创建,对象的存储(map),对象管理(依赖查找,依赖注入)

    核心服务(整合资源)

    核心特性 (IOC-面向对象,AOP-面向切面,Cloud-面向微服务)

    xml配置bean对象,把HelloService交给Spring来管理

    <bean id="helloService"

                class="beans.HelloService"

                scope="prototype"

                init-method="init"

                destroy-method="destory"/>

    在Spring容器中管理Bean对象,可以声明时通过scope属性或

    1) singleton (这个作用域标识的对象具备全局唯一性):系统默认

    2) prototype(这个作用域标识的对象每次获取都会创建新的对象)

    1) singleton作用域的对象可以容器关闭时销毁(会调用对象的销毁资源的方法)

    2) prototype作用域的对象可以由容器创建对象,初始化对象,不负责销毁.

    1) lazy-init: 应用在bean标签中用于指定这个bean的加载策略.

    2) default-lazy-init:应用在beans标签中用于指定所有bean的加载策略.

    通过set属性赋值

    <bean id="dataSource" class="beans.OpenDataSource">

               <property name="driverClassName" value="com.jdbc.mysql.Driver"/>

               <property name="url" value="jdbc:mysql:///test"/>

               <property name="username" value="root"/>

               <property name="password" value="root"/>

    </bean>

    通过构造方法为属性赋值

    <bean id="openDataSource02" class="beans.OpenDataSource">

                <!-- 默认按照构造方法参数顺序注入值

                           说明:配置时有几个constructor-arg就是

                           要调用带及格参数的构造函数

                 -->

                <constructor-arg value="com.mysql.jdbc.Driver"/>

                <constructor-arg value="jdbc:mysql:///test"/>

                <constructor-arg value="root"/>

                <constructor-arg value="123456"/>

    </bean>

    如果注入值是提取文件中的属性可以用      #{文件名.属性}

    <property name="password" value="#{cfg.password}"/>

    Spring 配置文件中为对象属性注入值。

    <bean id="collection"  class="beans.CollectionObject">

             <property name="list">

                <list>

                   <value>A</value>

                   <value>B</value>

                </list>

             </property>

             <property name="map">

                <map>

                  <entry key="k1" value="100" />

                  <entry key="k2" value="300" />

                </map>

             </property>

             <property name="properties">

                <props>

                   <prop key="username">root</prop>

                   <prop key="password">123456</prop>

                </props>

             </property>

         </bean>

    1) 修饰Bean对象的注解。(xml描述bean使用<bean>

    a) @Configuration描述Bean为一个配置对象)

    b) @Component(描述Bean为一个一般组件组件)

    c) @Controller(描述Bean为一个控制层对象

    d) @Service (描述Bean为一个业务层对象

    e) @Respository描述Bean为一个持久层对象)

    f) @Scope(描述bean的作用域)

    g) @Lazy定义bean对象是否延迟加载)

    1) 指定Bean生命周期方法 (xml中使用<bean init-method=””>)

    a) @ PostConstruct(描述生命周期开始要调用的初始化的方法)

    b) @ PreDestroy (描述生命周期结束时要调用的销毁的方法)

    说明:描述生命周期方法的注解应用时应在JDK1.7以上版本

    2) 自动装配注解(属性注入值):类似xml阶段中bean标签的autowire属性

    a) @Autowire (一般修饰构造方法或set方法属性,默认按类型装配)

    b) @Qualifier (配合Autowire注解,按名字进行装配,尤其出类型相同的bean,可以指定具体bean)

    c) @Resource (一般修饰set方法属性,默认按名字装配)

    Spring AOP

    切面(aspect): 横切面对象,一般为一个具体类对象(可以借助@Aspect声明)

    连接点(joinpoint):程序执行过程中某个特定的点,一般指被拦截到的的方法

    切入点(pointcut):对连接点拦截内容的一种定义,一般可以理解为多个连接点的结合.

    通知(Advice):在切面的某个特定连接点上执行的动作(扩展功能),例如around,before,after

    <dependency>

      <groupId>org.springframework</groupId>

      <artifactId>spring-context</artifactId>

      <version>4.3.9.RELEASE</version>

       </dependency>

     Spring AOP的实现依托于Aspect框架(AOP框架)

     所以要引用1.8.5有问题 -->

    <dependency>

    <groupId>org.aspectj</groupId>

    <artifactId>aspectjrt</artifactId>

    <version>1.8.9</version>

    </dependency>

    <dependency>

    <groupId>org.aspectj</groupId>

    <artifactId>aspectjweaver</artifactId>

    <version>1.8.9</version>

    </dependency>

    关于aop切面的配置

        <bean id="helloService"

              class="spring.beans.HelloServiceImpl"/>

    <!-- 配置非核心业务对象(日志处理对象):切面 -->

    <bean id="log" 

              class="spring.aop.LoggingAspect"/>

        <!-- AOP配置(切入点,切面) -->  

        <aop:config>

           <!-- 配置切入点(bean,@annotation,within) -->

           <aop:pointcut 

                expression="within(spring.beans.HelloServiceImpl)" 

                id="logPointCut"/>

           <!-- 配置日志处理 -->

           <aop:aspect ref="log" >

               <aop:before method="beforeMethod" 

                           pointcut-ref="logPointCut"/>

               <aop:after  method="afterMethod"

                           pointcut-ref="logPointCut"/>

           </aop:aspect>

        </aop:config>

    </beans>

    Spring事务

    Spring提供了两种事务管理方式, 编程式事务和声明式事务。

    事务四大特性:ACID(

    1) 原型子型(一个事务中的多个操作要么都成功要么都失败)

    2) 一致性(例如存钱操作,存之前和存之前的钱数应该是一致的)

    3) 隔离性(事务与事务应该是相互隔离的)

    4) 持久性(事务一旦提交,数据要持久保存)

    Step1:在spring配置文件中启用事务注解

    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

    <property name="dataSource" ref="dataSource"/>

    </bean>

    <!--设置注解驱动的事务管理  -->

    <tx:annotation-driven transaction-manager="txManager"/>

    Step2:在类或方法中使用@Transaction注解应用事务。

  • 相关阅读:
    Java辅助类持续汇总~
    Java关于数字工具类~持续汇总~
    Java关于字符串工具类~持续汇总~
    Java关于日期的计算持续汇总~
    antlr v4 使用指南连载4——词法规则入门之黄金定律
    antlr v4 使用指南连载3——g4文件概览
    antlr v4 使用指南连载2——准备环境
    antlr 4新特性总结及与antlr v3的不同
    antlr v4 使用指南连载1——简介
    Angularjs中使用$location获取url参数时,遇到的坑~~~
  • 原文地址:https://www.cnblogs.com/xiaoshazi/p/13157402.html
Copyright © 2011-2022 走看看