spring-ioc

ioc

添加依赖

1
2
3
4
5
6
7
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
</dependencies>

创建spring配置文件

1
2
3
4
5
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

Bean

<bean id="bookDao" class="com.xu.Dao.impl.BookDaoImpl" scope="prototype"></bean>

  1. 默认为单例模式,可以使用scope属性更改

  2. 使用name属性取别名

  3. 主类

    默认使用无参构造器创建bean

    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class App {
    public static void main(String[] args) {
    //获取ioc容器
    ApplicationContext ctx = new ClassPathXmlApplicationContext("config.xml");
    //拿到bean
    BookDao bookDao =(BookDao) ctx.getBean("bookDao");
    bookDao.save();
    }
    }

生命周期

  1. init-method destory-method 初始化,销毁方法,销毁必须关闭容器才会显示
    1. 手动关闭

      直接使用ConfigurableApplicationContext接口中的close()方法

    2. 注册关闭钩子,在虚拟机关闭之前,先关闭容器再关闭虚拟机

      ConfigurableApplicationContext接口的registerShutdownHook()操作

依赖注入

setter注入

注入类的属性

  • 简单类型

    类中设置set方法,利用value值在bean标签中进行注入

  • 引用类型

    引用外部对象,先设置外部类的bean标签,然后再需要引用的bean标签中使用ref属性,来注入引用类型

构造器注入

自动装配

  1. 按照类型装配
  2. 按id装配

数据源管理

1
2
3
4
5
6
7
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/blog?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull&amp;useSSL=true"/>
<property name="password" value="root"/>
<property name="username" value="root"/>
</bean>

加载properties配置文件

  • 开辟context命名空间

  • 加载配置文件

    1
    <context:property-placehoder location="properties文件位置">
  • 使用${}取值

获取bean的三种方法

1
2
3
4
5
BookDao bookDao1 =(BookDao) ctx.getBean("bookDao");
//不用强转,需要加上类型
BookDao bookDao2 = ctx.getBean("bookDao",BookDao.class);
//按照类型获取,若有相同类型会报错
BookDao bookDao3 = ctx.getBean(BookDao.class);

创建容器两种方式

  1. 使用ClassPathXmlApplicationContext创建容器
  2. 使用绝对路径创建容器,FileSystemXmlApplicationContext创建容器

注解开发

  • @component组件

  • 在配置文件中配置

    1
    <context:component-scan base-package="组件所在位置"/>

纯注解开发

  • 创建配置类来替换配置文件
  • 在配置类上添加@configuration和@componenScan注解
  • 在主类中使用AnnotationConfigApplicationContext(“配置类”)加载配置类,获取ioc容器
  • 单例,多例@scope(“prototype”)
  • 初始化和销毁
    1. @PostConstruct注解标注初始化方法
    2. @PreDestory注解标注销毁方法

使用注解注入

注入引用类型

  • @Autowired———————-该注解是利用类型注入的,不需要提供setter方法,要保证有无参构造
  • 若有多个相同类型的bean需要按类型注入,加入@Qualifier(“bean的名称”)

注入简单类型

  • @Value注入简单类型

加载properties文件

  • @PropertySource(“配置文件名”),多个配置文件可以使用字符串数组表示

第三方包注入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Configuration
@ComponentScan("com.xu")
public class SpringConfig {
//定义一个方法管理对象
//@Bean,表示当前方法的返回值是一个Bean
@Bean
public DataSource dataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setUrl("jdbc:mysql://localhost:3306/blog");
druidDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
druidDataSource.setUsername("root");
druidDataSource.setPassword("root");
return druidDataSource;
}
}
  • 第三方Bean还可以单独设置配置类,在主配置类中使用@Import(“第三方配置类”),可以使用数组方式导入多个
  • 引用类型直接给参数就行

Spring整合mybatis

  1. 导入坐标

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <dependencies>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.10.RELEASE</version>
    </dependency>
    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.31</version>
    </dependency>
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.29</version>
    </dependency>
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.5</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.9.RELEASE</version>
    </dependency>
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.0</version>
    </dependency>
    </dependencies>
  2. 造jdbc连接配置类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class JdbcConfig {
    //定义一个方法管理对象
    //@Bean,表示当前方法的返回值是一个Bean
    @Bean
    public DataSource dataSource(){
    DruidDataSource druidDataSource = new DruidDataSource();
    druidDataSource.setUrl("jdbc:mysql://localhost:3306/spring");
    druidDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
    druidDataSource.setUsername("root");
    druidDataSource.setPassword("root");
    return druidDataSource;
    }
    }
  3. mybatis配置类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public class MybatisConfig {
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
    SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
    ssfb.setTypeAliasesPackage("com.xu.pojo");
    ssfb.setDataSource(dataSource);
    return ssfb;
    }
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
    MapperScannerConfigurer msc = new MapperScannerConfigurer();
    msc.setBasePackage("com.xu.dao");
    return msc;
    }
    }
  4. 导入配置类

    1
    2
    3
    4
    5
    @Configuration
    @ComponentScan("com.xu")
    @Import({JdbcConfig.class, MybatisConfig.class})
    public class SpringConfig {
    }