Spring-IOC

本文介绍了如何在Spring Boot项目中集成Druid数据源管理和MyBatis框架,包括第三方Bean的配置、属性占位符、依赖注入以及完全注解开发方式。重点讲解了如何使用XML配置和注解替代,以及如何通过@PropertySource处理属性文件和依赖注入。
摘要由CSDN通过智能技术生成

IOC相关(二)

管理第三方的Bean(也就是其他人给我们定义的Bean类型,例如Druid,WebMvc)

例如:druid的数据源配置

<bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
        
    </bean>

DruidDataSource中需要配置数据源的属性,才能知道访问的是哪个数据库,提供驱动类型,账户名,密码等属性。

<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/spring_db"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>

运行结果:

{
	CreateTime:"2022-04-23 20:48:16",
	ActiveCount:0,
	PoolingCount:0,
	CreateCount:0,
	DestroyCount:0,
	CloseCount:0,
	ConnectCount:0,
	Connections:[
	]
}

加载Properties

原因:druid中的属性有时候需要改动,则还需要去改properties中的值,非常不方便,而且可以倒是运行错误,所以专门用一个peoperties文件来对其中的属性进行赋值,然后用${**}来获取值。

注:propertioes中的值在xml文件中都可以用¥{**}读取值。

步骤:1,开辟命名空间

            2,配置读取文件的位置

<!--    1,创建命名空间-->
<!--    xmlns:context="http://www.springframework.org/schema/context"-->
<!--    http://www.springframework.org/schema/context-->
<!--    http://www.springframework.org/schema/context/spring-context.xsd-->
<!--    2,配置属性占位符读取文件的位置-->
    <context:property-placeholder location="classpath:*.properties"/>
*system-properties-mode="NEVER属性是环境属性是否开启,默认是开启的,所以peoperties中如果直接用username,或者password作为属性名,会与环境属性中的username冲突。

classpath知识点:参考类文件路径一classpath - LittleDonkey - 博客园 (cnblogs.com)

可以将target下的classes路径作为参考。

 容器:

         ApplicationContext context = new ClassPathXmlApplicationContext("springcontent.xml");
         ApplicationContext context1 new ClassPathXmlApplicationContext("E:\\Sping相关\\spring_lessons\\Class2\\src\\main\\resources\\springcontent.xml");

两种方法都可以你第一种按照名称加载,第二种是按照绝对路径查找。这两种都是初始化容器的方式。

*还可以加载多个配置文件 

ApplicationContext context = new ClassPathXmlApplicationContext("springcontent.xml","springcontent1.xml");

注解开发:

定义为Bean:

//定义为组件,交给容器管理,默认名称为userDao,首字母小写
@Component
public class UserDao {
    
}
//开启组件扫描
 <context:component-scan base-package="com.wlb"/>

完全注解开发:

@Configuration //定义为配置类
@ComponentScan("com.wlb")
@PropertySource({"application.properties","application.properties"}) //value的值都是用数组类型,无法使用*等占位符
public class SpringConfig {
}

 不同点就是xml的文件配置用配置类代替,初始化容器用ApplicationContext下面实现类AnnotationConfigApplicationContext去加载配置类

ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);

依赖注入:只需要在注入类的类名上架@Autwired,可以不加set方法,默认是按照类型装配,类型相同在按照名称注入。

    @Autowired
    @Qualifier("userDao") //指定需要装配的名称
    private UserDao userDao;

简单类型注入:

 @Value("张三")
    private String name;

管理第三方bean:

定义dataSource为第三方bean:

@PropertySource("classpath:druid.properties")
public class DruidConfig {
    @Value("${jdbc.DriverClassName}")
    private String driverClassName;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    @Bean //创建为第三方bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

导入配置类:

@Configuration //定义为配置类
@ComponentScan("com.wlb")
@Import(DruidConfig.class)
//@PropertySource({"application.properties","application.properties"}) //value的值都是用数组类型,无法使用*等占位符
public class SpringConfig {
}

Spring整合mybatis:

配置类:

package com.wlb.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;

@Configuration  //声明该类是核心配置类
@ComponentScan("com.wlb")  //开启spring注解扫描
@PropertySource("classpath:db.properties")  //引入properties文件
@MapperScan("com.wlb.dao")   //MyBatis扫描dao接口
public class SpringConfig {
    //定义属性 为属性注入数据(数据的来源上面引入的db.properties文件)
    @Value("${db.driverClass}")
    private String driverClass;
    @Value("${db.url}")
    private String url;
    @Value("${db.username}")
    private String username;
    @Value("${db.password}")
    private String password;

    //创建数据源返回数据源,Spring会自动调用该方法,并将该对象交给IOC容器管理
    @Bean
    public DataSource dataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName(driverClass);
        druidDataSource.setUrl(url);
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        return druidDataSource;
    }

    //创建SqlSessionFactoryBean对象,设置形参,Spring会自动去调用IOC容器中已有的数据源
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        return sqlSessionFactoryBean;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值