【从零学习SSM】|第三篇

前言:

        学习内容来自于黑马的SSM学习。从零学习SSM,目前是spring内容。这内容主要是    IOC/DI配置管理第三方bean。

黑马程序员SSM框架教程_Spring+SpringMVC+Maven高级+SpringBoot+MyBatisPlus企业实用开发技术_哔哩哔哩_bilibili

        

1、对于数据源的管理

        使用Spring的IOC 容器来管理Druid连接池对象

                添加pom.xml依赖

                在配置文件配置第三方的bean,让IOC容器管理

               连接数据库需要驱动,连接,账号,密码

               在IOC容器中获取bean对象,将其打印在控制台查看结果

添加pom.xml依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.16</version>
</dependency>

配置第三方的bean,需要在applicationContext.xml配置文件中添加DruidDataSource的配置

<?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">
	<!--管理DruidDataSource对象-->
    <bean  id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/your_mysqlName"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>
</beans>

在IOC容器中获取bean对象

 public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        DataSource dataSource = (DataSource) ctx.getBean("dataSource");
        System.out.println(dataSource);
    }

2、实现C3P0管理

        导入依赖

<!--        c3p0 依赖-->
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>
<!--        mysql 驱动包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

        配置bean

<bean  id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
       <property name="driverClass" value="com.mysql.jdbc.Driver"/>
       <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/tlias"/>
       <property name="user" value="root"/>
       <property name="password" value="123456"/>
       <property name="maxPoolSize" value="1000"/>
   </bean>

        运行

3、减低耦合度,第三方bean优化

        resources下创建一个jdbc.properties文件,并添加对应的属性键值对

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/alias
jdbc.username=root
jdbc.password=123456

开启命名空间,并且完成属性注入 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启applicationContext.xml中开`context`命名空间-->
    <context:property-placeholder location="jdbc.properties"/>
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
</beans>

其他不变

3、注解开发bean 

1、删除原来XML的bean配置

<bean id="bookDao" class="com.example.dao.Impl.BookDaoImpl"/>

2、在实体类上加入@Componet注解

需要在实体类上加,不可以在接口加,因为接口是没办法创建对象的,作用相当于一个Bean

 3、配置注解包扫描

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="com.example"/>
</beans>

4、运行就可以查看结果

   public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        bookDao.save();
    }

5、同理也可以在Service添加注解@Component

4、注解开发依赖注入

加入注解@Autowired

@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private bookDao bookDao;

    public void save() {
        System.out.println("book service save ...");
        bookDao.save();
    }
}
@Component("bookDao")
public class BookDaoImpl implements bookDao {
    public void save() {
        System.out.println("book dao save ..." );
    }
}
    public static void main(String[] args) {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
//        bookDao bookDao = (bookDao) ctx.getBean("bookDao");
//        System.out.println(bookDao);
        BookService bookService = ctx.getBean(BookService.class);
        bookService.save();
        System.out.println(bookService);

    }

运行 

 

 5、注解开发第三方Bean

完成对Druid数据源的管理,具体的实现步骤为:

导入jar包

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.16</version>
</dependency>

配置Bean

@Configuration
@ComponentScan("com.example")
public class SpringConfig {

    @Bean
    public DataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/alias");
        ds.setUsername("root");
        ds.setPassword("123456");
        return ds;
    }
}

在IOC容器中获取Bean并且打印

 简化增强阅读,最好一个bean用一个类

1、新建一个jdbcConfig配置类,jdbcCofig添加注解

JdbcConfig类要放入到com.example.demo3.config包下,需要被Spring的配置类扫描到即可

@Configuration
public class JdbcConfig {
    @Bean
    public DataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/tlias");
        ds.setUsername("root");
        ds.setPassword("123456");
        return ds;
    }
}

2、在spring配置类使用扫描

@Configuration
@ComponentScan( "com.example.demo3.config")
public class SpringConfig {

}

3、运行

但是这个方法不直观,我们不知道导入了扫码配置类, 引入外部配置类,加上注解@Import

1、去掉JdbcConfig中的@Configuration

2、在SpringConfig配置类中使用@Import

3、运行

如果有多个配置类,不可以重复使用@Import 应该使用数组,查看源码可以知道是一个数组

正确写法 @Import({JdbcConfig.class,xxxx.class}) 用括号括起来,并且用逗号隔开

6、注入简单的数据类型

 第一种 直接注入

public class JdbcConfig {
    @Value("com.mysql.jdbc.Driver")
    private String driver;
    @Value("jdbc:mysql://localhost:3306/spring_db")
    private String url;
    @Value("root")
    private String userName;
    @Value("password")
    private String password;
	@Bean
    public DataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(userName);
        ds.setPassword(password);
        return ds;
    }
}

 第二种 通过jdbc.properties 文件注入 

在resource创建一个jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/alias
jdbc.username=root
jdbc.password=123456
修改JdbcConfig内容
public class JdbcConfig {
    @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(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(userName);
        ds.setPassword(password);
        return ds;
    }
}

知识点:

@Configuration

名称@Configuration
类型类注解
位置类定义上方
作用设置该类为spring配置类
属性value(默认):定义bean的id
@ComponentScan
名称@ComponentScan
类型类注解
位置类定义上方
作用设置spring配置类扫描路径,用于加载使用注解格式定义的bean
属性value(默认):扫描路径,此路径可以逐层向下扫描

@Component

名称@Component/@Controller/@Service/@Repository
类型类注解
位置类定义上方
作用设置该类为spring管理的bean
属性value(默认):定义bean的id

 @Autowired

名称@Autowired
类型属性注解 或 方法注解(了解) 或 方法形参注解(了解)
位置属性定义上方 或 标准set方法上方 或 类set方法上方 或 方法形参前面
作用为引用类型属性设置值
属性required:true/false,定义该属性是否允许为null

@Bean

名称@Bean
类型方法注解
位置方法定义上方
作用设置该方法的返回值作为spring管理的bean
属性value(默认):定义bean的id

@Import

名称@Import
类型类注解
位置类定义上方
作用导入配置类
属性value(默认):定义导入的配置类类名, 当配置类有多个时使用数组格式一次性导入多个配置类

@Value

名称@Value
类型属性注解 或 方法注解(了解)
位置属性定义上方 或 标准set方法上方 或 类set方法上方
作用为 基本数据类型 或 字符串类型 属性设置值
属性value(默认):要注入的属性值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值