Spring学习笔记

一.Spring核心容器

1.IoC反转控制和DI依赖注入

2.容器和Bean获取

3.Bean基本配置

(1)基础配置

(2)别名

        多个别名都可以访问到Bean

(3)作用范围---单例和非单例

      a.  scope标签:singleton(默认单例), prototype

      b.单例存在的原因是很多情况下都是调用某个类中的成员方法,只创建一个类即可满足需求且效率更高       

      c.

            

4.Bean的实例化

(1)调用无参的构造方法---反射

(2)静态工厂

(3)实例工厂---FactoryBean

5.Bean的生命周期

(1)控制生命周期

        a.自己写init和destory方法,然后配置init-method和destroy-method

        b.实现接口

(2)关闭容器

        a.接口实现类的close()

        b.钩子设置 registerShutdownHook()

6.依赖注入的方式

         a.引用数据类型---ref

         b.基本数据类型---val

(1)setter---property 标签       

        在类中写setter方法赋值

(2)静态工厂--- constructor-arg 标签

        在类中写构造方法赋值

    ---依赖注入方式的选择

7.依赖自动注入

在bean标签中设置autowire属性---byType,byName

8.集合注入

五种集合注入的书写形式

9.加载properties文件:

(1)加载步骤

      a.开启context命名空间

        b.加载配置文件

        c.使用占位符读取数据---${}

(2)加载properties文件的方式

10.容器

(1)加载配置文件的方式

(2)获取Bean的三种方式

(3)容器类的层次结构

11.总结:

(1)容器相关

(2)Bean相关

(3)依赖注入

二.注解开发

1.注解开发定义Bean

(1)步骤

a.在bean的类中添加注解@Component

b.配置文件中设置包扫描

<context:component-scan base-package="dao"/>

(2)衍生注解

2.纯注解开发

(1)定义配置类添加注解

(包扫描中如果是多个包采用{“aaa”,“bbb”数组的形式传入)

(2)获取Bean时使用AnnotationConfigApplicationContext的实体类,参数为配置类的class

3.注解配置Bean

(1)作用范围

(2)生命周期

高版本jdk无此注解,需要导入依赖 

<artifactId>javax.annotation-api</artifactId>

4.注解依赖注入

(1)自动装配--->@Autowired,按类型匹配

(2)多个同类型Bean--->@Qualifier,按名匹配

(3)基本数据类型--->@Value

(4)读取properties文件--->配置类中@PropertySource("aaa"),占位符取值

5.管理第三方Bean

(1)创建一个第三方Bean的管理类,其中有一个方法返回目标Bean,且需要添加@Bean

(2)在容器配置文件中使用@Import导入Bean的管理类

(3)第三方Bean的依赖注入

a.基本类型---成员变量使用@Value赋值后传入

b.引用类型---形参加参数,容器自动按类型装配

6.注解开发总结

三.Spring整合MyBatis(+Druid)

1.导入Spring和mybatis相关的两个依赖

        <!-- spring操作数据库的包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
        <!-- spring整合mybatis的包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.0</version>
        </dependency>

2.注解方式创建配置类,完成DruidSource的配置---后续mybatis中需要配置一个DataSource的参数

@Configuration//表示这是容器配置类
@ComponentScan("com.dongnan")//扫描Bean,此处是service中有BrandDervice需要被容器管理
@PropertySource("jdbc.properties")//加载配置文件
@Import({jdbcConfig.class,MybatisConfig.class})//将第三方管理获取的bean加入容器
public class SpringConfig {
}
public class jdbcConfig {
    public DataSource dataSource;
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

@Bean
    public DataSource dataSource() {
    System.out.println(driver);
    System.out.println(url);
    System.out.println(username);
    System.out.println(password);
        DruidDataSource datasource = new DruidDataSource();
        datasource.setDriverClassName(driver);
        datasource.setUrl(url);
        datasource.setUsername(username);
        datasource.setPassword(password);
        return datasource;
    }
}

3.完成MyBatis配置类---包括返回

public class MybatisConfig {
    //定义bean,SqlSessionFactoryBean,用于产生SqlSessionFactory对象
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource ds) {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setTypeAliasesPackage("com.dongnan.dao");//取别名
        bean.setDataSource(ds);//DataSource中包含了主体信息

        return bean;
    }
    //定义bean,返回MapperScannerConfigurer对象
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(){
    MapperScannerConfigurer msc = new MapperScannerConfigurer();
    msc.setBasePackage("com.dongnan.dao"); //Mapper扫描

    return msc;
}
}

注:

a.Mapper扫描类也记得添加@Bean

b.完成MyBatisConfig配置后要在SpringConfig中导入

四.AOP

1.aop功能和基本概念

(1)无侵入式的实现代码的功能性增强

(2)

a.连接点:Spring中是一个方法

b.切入点:用来匹配一个具体的方法或多个方法

c.通知:一个定义了共性功能的方法,存放在通知类中

d.切面:绑定一个通知和一个切入点

2.aop实现

(1)导入依赖坐标

   <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.4</version>
        </dependency>
    </dependencies>

(2)定义连接点方法

(3)定义通知类和通知

(4)定义切入点

需要写pt()方法,然后加注解指明切入点的位置

(5)设置切面

设置两个注解来加入容器和表明这是aop切面,同时绑定切入点和通知

@Component
@Aspect
public class Advice {
    @Pointcut("execution(void com.dongnan.dao.BookDaoImpl.b())")//指定切入点
    private void pt(){}

    @Before("pt()")//设置切面
    public void method(){
        System.out.println("功能增强");
    }
}

(6)在配置类中添加表明注解开发的注解

@Configuration
@ComponentScan("com.dongnan")
@EnableAspectJAutoProxy//声明注解开发
public class SpringConfig {
}

3.AOP工作流程

(1)SpringAOP本质---代理模式

(2)两个AOP核心概念

目标对象,代理对象

(3)工作流程

4.AOP切入点表达式

5.AOP通知类型

...

Around:

6.AOP获取参数数据

7.处理空格的功能实例

五.事务管理

1.实现

(1)给需要事务管理的类的接口添加注解

(2)在jdbc的config.class中配置事务管理器

    //配置事务管理器,mybatis使用的是jdbc事务
    @Bean
    public PlatformTransactionManager transactionManager(DataSource ds) {
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(ds);
        return dataSourceTransactionManager;
    }

(3)配置类中开启注解式事务驱动

2.Spring事务角色

3.事务属性

只有在ERROR和运行时异常才会回滚,其他异常则需要自己设置

4.事务传播行为

用于将不同的事务调度员交由不同的事务管理员管理,实现事务的隔离,例如银行转账成与否都要添加日志,则转账事务和添加日志事务隔离

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值