Spring框架复习总结

最近在复习spring5框架,总结一下工作中常用的一些方法的原始方法。

在这里插入图片描述

(一)Spring之IOC详解(工厂设计模式,反射)

  1. spring ioc所属的jar包
    加

  2. 对象初始化DI注入(基于XML的配置)
    如果对象里面包含其它对象,用 ref 引入;
    在这里插入图片描述

  3. 基于注解方式实现属性的注入的几种方式(需要开启扫描)
    a.基于xml配置:<context:component-scan base-package="com.wwy.spectj"/>
    b.基于类的注解配置:@ComponentScan(basePackages = {"com.wwy.spectj"})

@Controller 控制层,默认使用的注解,spring管理
@Service 业务层,默认使用的注解,spring管理
@Repository 声明此类是一个dao类,访问数据库
@Component 声明此类是一个Spring管理的类
@RestController 等于@Controller+@ResponseBody,用于REST服务,可返回json格式字符串
@PostConstruct 当bean被容器初始化后会调用@PostConstruct注解的方法
@Configuration 声明此类是一个配置类,
@PreDestroy在容器被销毁之前调用@PreDestory注解的方法
@Bean 用在方法上,声明该方法执行的结果返回结果是一个spring容器管理的Bean在创作中心设置你喜爱的代码高亮样式,Markdown **将代码片显示选择的高亮样式** 进行展示;

  1. bean的生命周期

在这里插入图片描述
实际来讲有七步,继承BeanPostProcessor实现其方法,就会在执行初始化之前后来调用其方法:
在这里插入图片描述

(二)Spring之AOP详解(代理模式)

JDK动态代理的方法:使用Proxy类,调用newProxyInstance方法

AOP的常用术语

  1. 连接点:类里面有哪些方法可以被增强,这些方法称之为连接点
  2. 切入点:实际被增强的方法,称之为切入点
  3. 通知(增强):实际增强的逻辑部分称为通知(增强);
    通知的类型有:前置通知;后置通知;环绕通知,异常通知,最终通知
  4. 切面:把通知应用到切入点的过程。

AspectJ:spring框架一般是基于AspectJ进行AOP操作,其并不是spring框架的组成部分。
切入点表达式:
1.作用:对那个类里面的那个方法增强
2.语法结构:execution([权限修饰符] [返回类型] [类的全路径] [方法名称] ([参数列表]))
3. 相同的切入点抽取:

	@Pointcut("execution(* com.wwy.spectj.Book.buy(..))")
    public void pointDemo(){
    }
     @Before(value ="pointDemo()")
    public void before(){
        System.out.println("before.......");
    }
    @After(value = "pointDemo()")
    public void after(){
        System.out.println("after.......");
    }

1)基于XML配置实现aspectJ:

<!--注入普通类-->
    <bean id="book" class="com.wwy.spectj.Book"></bean>
    <!--注入代理类-->
    <bean id="bookProxy" class="com.wwy.spectj.BookProxy"></bean>
    <!--配置Aop增强-->
    <aop:config>
        <!--切入点-->
        <aop:pointcut id="p" expression="execution(* com.wwy.spectj.Book.buy(..))"/>
        <!--配置切面-->
        <aop:aspect ref="bookProxy">
            <!--增强在具体的方法-->
            <!--前置通知方法-->
            <aop:before method="before" pointcut-ref="p"/>
            <!--后置置通知方法-->
            <aop:after method="after" pointcut-ref="p"/>
            <!--异常通知方法-->
            <aop:after-throwing method="afterThrowing" pointcut-ref="p"/>
        </aop:aspect>
    </aop:config>

2)基于注解配置类实现aspectJ:

@Component
@Aspect//生成代理对象
public class TestProxy {
    @Pointcut("execution(* com.wwy.spectj.Book.buy(..))")
    public void pointDemo(){
    }

    @Before(value ="pointDemo()")
    public void before(){
        System.out.println("before.......");
    }
    @After(value = "pointDemo()")
    public void after(){
        System.out.println("after.......");
    }
    @AfterReturning(value = "pointDemo()")
    public void afterReturning(){
        System.out.println("afterReturning.......");
    }
    @AfterThrowing(value = "pointDemo()")
    public void afterThrowing(){
        System.out.println("afterThrowing.......");
    }
    @Around(value = "pointDemo()")
    public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        System.out.println("around之前。。。。。。");
        proceedingJoinPoint.proceed();
        System.out.println("around之后。。。。。。");
    }

}

在xml里面开启:

  <!--开启AspectJ生成代理对象-->
   <aop:aspectj-autoproxy/>

(三)Spring之事务管理

1)基于XML配置实现事务管理:

 <!--配置数据库连接池-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql:///springtest" />
        <property name="username" value="root" />
        <property name="password" value="abc"></property>
    </bean>

    <!--JdbcTemplate-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!--注入数据源-->
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--创建事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--注入数据源-->
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--开启事务注解-->
    <tx:annotation-driven transaction-manager="transactionManager"/>

2)基于注解配置类实现事务管理:

@Configuration //配置类
@ComponentScan(basePackages = "com.wwy.jdbc")//扫描类
@EnableTransactionManagement//开启事务
public class AnnoConfig {
}

3)事务的传播行为

//默认的事务传播行为
@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
事务的传播行为类型具体解释
PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。
PROPAGATION_SUPPORTS支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY使用当前的事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW新建事务,如果当前存在事务,把当前事务挂起。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值