重习spring知识点

重习spring知识点

距离自学spring过去了快一年的时间了,因为用得比较少,很多都忘记了,这次又重新看起了spring,下面是我整理的一些知识点。

说到spring,我们就会想到经常会问到IOC和AOP。
IOC是控制反转,什么叫做控制反转?理解上来说,在没有spring之前,对象的控制权都来自于程序员,当我们使用了Spring,对象的控制权由程序员转向了外部,对象的创建和初始化就不再是程序员所控制,这种就是控制反转。在控制反转中,还会提及到容器,这里的容器实际上就是上面提到的外部,使用spring就是将对象放在容器中,这里的对象就是bean。谈到spring,我们还会想到DI(依赖注入),在一定的方面,我们可以将IOC等同于DI,依赖注入就是将对应的属性的值注入具体的对象.

说说使用spring的好处,在一开始,我们创建dao对象的时候,都是经过new,如果需要同时执行多个dao对象的时候,就需要编写多个dao实现类,并且在serviceimpl去new多个对象,这个过程是高耦合的,但是我们在写代码的时候,一般要求不会想要高耦合,这个时候,使用spring的控制反转是可以降低耦合性,主要是通过使用IOC容器管理bean,将IOC容器含有依赖关系的bean进行关系绑定。通过代码我们可以知道,跟不使用spring不同的是,spring不需要new对象,只要在application.xml文件中绑定service和dao之间的关系即可,不使用spring的代码如下:
userDao接口

public interface UserDao{
    public void save();
}

userDao实现类

public class UserDaoImpl implements UserDao {
       public void save(){
           System.out.println("save dao...");
       }
}

service接口

public interface UserService {
       public void save();
}

service实现类


public class UserServiceImpl implements UserService {

    private UserDao userDao = new UserDaoImpl();
    public void save(){
        System.out.println("save service...");
        userDao.save();
    }
}

使用spring的代码如下:
userDao接口、userDao的实现类和userService接口的代码不变
userServiceImpl实现类:

private UserDao userDao;
    public void save(){
        System.out.println("save service...");
        userDao.save();
    }

    public void setUserDao(UserDaoImpl userDao) {
        this.userDao = userDao;
    }

application.xml

 <bean id="userService" class="com.example.spring.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"/>
    </bean>

上面的代码是实现service和dao的依赖绑定

spring另外一大核心就是AOP
AOP是oop的补充,面向切面编程,它的核心有连接点、切入点、通路和切面。
连接点是可能被截断的方法,切入点是增强的连接点,切面负责连接点和切入点的连接,通路具有增强功能。
在代码中需要在pom.xml导入坐标,然后使用注解@aspect和@Pointcut(“execution(返回参数 包名.接口名.方法名(参数))”)

在连接点方法上用注解@Before(“上述的方法名”)即可

还需要在自己配置的SpringConfig类加入注解@EnableAspectJAutoProxy在当前的配置类上。、

aop的切入点表达式
execution(返回参数 包名.接口.类名.方法名(参数)) 可以用*来表示任意返回参数、任意包名、任意接口、任意方法名、任意参数。

切入点通常描述接口,不描述实现类,返回类型对于增删改操作使用精准类型加速匹配,对于查询采用通配类型加速匹配。
一般不采用…匹配,效率低,一般采用
单个匹配或者进行精准匹配
方法名以动词进行精准匹配,以名词进行*通配匹配。

aop的通知类型有@Before,@After,@Around,@AfterReturning,@After
Throwing
其中Around环绕通知需要使用异常处理,以及参数ProceedingJoinPoint来实现对原始方法的调用,AfterReturning是没有异常,正常执行到最后调用的,AfterThrowing是出了异常之后使用的。

AOP可以获取数:获取参数,获取返回值,获取异常信息
AOP获取参数,@Before(JoinPoiont jp),@After(JoinPoint jp),@Around(ProceedingJoinPoint pjp),执行原始方法获得返回值。
AOP可以解决密码出现空格的问题,可以获取参数之后,然后把对象里面的空格去掉,再重新放入对象中,传给业务层,这样子尽管密码中有空格也可以成功登录。

Spring事务管理
说到Spring的事务管理,首先就得说一下事务管理是什么?事务管理是指再数据层的数据操作同成功或同失败。
Spring的事务管理是指在数据层或业务层中的操作中同成功或同失败。
典型的例子可以用银行转账,当我们进行转账的时候,本应该出现一方减钱,一方加钱,但是如果在执行的过程中出现异常,那么一方会执行相对应的操作,另外一方就无法执行,这是不可能存在的情况,所以在业务接口层加入@Transactional操作实现事务处理,不加在业务实现类上,是为了降低耦合,然然后在配置类中增加一个对象,使用PlatformTransactionManager设置事务管理器,同时需要在配置类中开启事务注解@EnableTransactionManagement

spring事务角色
事务管理员和事务协调员
事务管理员是开启事务的,存在于业务层中。
事务协调员是用来加入事务的,在数据层也在业务层中。

spring角色属性
spring如果只读的话,可以使用readOnly
spring不超时的话,可以使用timeout属性
spring还可以使用Propagation.support_new

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值