spring的简单介绍

1 篇文章 0 订阅

spring是一个开源的控制反转(IOC)和面向切面(AOP)的容器框架

Spring默认是单例的,可以通过@Scope 指定作用域singleton、protoType

  1. IOC-----控制反转

作为程序员,当我们去实例化一个对象时,通常需要手动new创建一个对象,并且去跟踪该对象的生命周期,内存分配,内存释放等情况,这样对我们写代码会造成很大不方便,而使用spring容器,spring的实例化new交给容器,我们使用 getBean获取该对象即可,不需要去管理对象

  1. AOP-----面向切面

在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子

(1)Aspect(切面):通常是一个类,里面可以定义切入点和通知

(2)JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用

(3)Advice(通知):AOP在特定的切入点上执行的增强处理,

Spring切面可以应用五种类型的通知

before:前置通知,在一个方法执行前被调用。@Before

after: 在方法执行之后调用的通知,无论方法执行是否成功。@After

after-returning: 仅当方法成功完成后执行的通知。@AfterReturning

after-throwing: 在方法抛出异常退出时执行的通知。@AfterThrowing

around: 在方法执行之前和之后调用的通知。@Around

4)Pointcut(切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式

(5)AOP代理:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类

  1. DI------依赖注入

即容器创建对象后,已经处理了对象的依赖关系

1、构造器注入

2、使用属性setter方法注入

3、采用注解的方式

@Autowired@Resource注解进行装配,二者的区别是@Autowired默认按类型装配,@Resource默认是按照名称装配,当找不到与名称匹配的bean就会按照类型装配。

注意:建议使用@Resource进行装配,它是javaee中的包,而@Autowired是spring提供的注解包,扩展性没有前者好

 

(一)spring实例化bean:

  1. 构造器实例化bean

<bean id="personService" class="com.impl.PersonServiceBean"/>

  1. 静态工厂实例化bean

<bean id="orderService" class="com.OrderFactory" factory-method="createOrder"/>

public class OrderFactory{

   public static OrderServiceBean createOrder(){

        return new OrderServiceBean();

}

}

  1. 实例工厂实例化bean

<bean id="orderFactory" class="com.OrderFactory"/>

<bean id="oService" factory-bean="personService" factory-method="createOrder"/>

public class OrderFactory{

   public OrderServiceBean createOrder(){

        return new OrderServiceBean();

  }

}

(二)Spring的事务管理

事务有四大特性(ACID):

1.原子性(Atomicity)事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。

2.一致性(Consistency)事务在完成时,必须是所有的数据都保持一致状态。

3.隔离性(Isolation)并发事务执行之间无影响,在一个事务内部的操作对其他事务是不产生影响,这需要事务隔离级别来指定隔离性。

4.持久性(Durability)一旦事务完成,数据库的改变必须是持久化的。

<bean id="ibatisTransactionManager"

        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

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

    </bean>

    <tx:advice id="ibatisTxAdvice"

        transaction-manager="ibatisTransactionManager">

        <tx:attributes>

            <tx:method name="do*" read-only="false"

                rollback-for="Exception" />

            <tx:method name="is*" read-only="true" />

            <tx:method name="has*" read-only="true" />

            <tx:method name="query*" read-only="true" />

        </tx:attributes>

    </tx:advice>

    <bean id="taskAfterAdvice"

        class="com.common.TaskAfterAdvice" />

 

    <aop:config proxy-target-class="true">

        <aop:advisor

            pointcut="execution(* com.cares..service.impl..*ServiceImpl.*(..))) "

            advice-ref="ibatisTxAdvice" />

        <aop:advisor

        pointcut="execution(* com.cares.clc..service.impl..*ServiceImpl.*(..))) "

            advice-ref="taskAfterAdvice" />

    </aop:config>

    <aop:aspectj-autoproxy />

 

Spring使用设计模式:

1.工厂模式,在各种BeanFactory以及ApplicationContext创建中都用到了;

2.模版模式,在各种BeanFactory以及ApplicationContext实现中也都用到了

3.代理模式,在Aop实现中用到了JDK的动态代理;

4.单例模式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在水一fang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值