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注解应用事务。

 

posted @ 2020-06-18 14:31  大青蛙大声道  阅读(109)  评论(0编辑  收藏  举报