Spring学习——依赖注入和配置数据源

Spring学习步骤

  1. Spring概念
  2. IOC容器
  3. Aop
  4. JdbcTemplate
  5. 事务管理
  6. Spring5新特性

1. Spring概念

  • Spring是轻量级的开源的javaEE框架
  • Spring可以解决企业应用开发的复杂性
  • Spring由两部分核心:IOC和Aop
    • IOC:控制反转,把创建对象过程交给Spring进行管理
    • Aop:面向切面编程,在不修改源代码的情况下,进行功能的增加和增强
  • Spring特点
    • 方便解耦,简化开发
    • Aop编程支持
    • 方便程序测试
    • 方便和其他框架进行整合
    • 方便进行事务操作
    • 降低API开发难度

2. IOC容器

1、IOC底层原理

  1. 什么是IOC?
    1. 控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理
    2. 使用IOC的目的:为了耦合度降低
  2. IOC底层原理:xml解析、工厂模式、反射

2、IOC接口(BeanFactory)

  1. IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
  2. Spring提供IOC容器实现两种方式(两个接口)
    1. BeanFactory:IOC容器基本实现,是Spring内部接口,不提供开发人员使用加载配置文件时不会创建对象,在获取配置对象使用时才会去创建对象
    2. ApplicationContext:BeanFactory接口的子接口,提供更多强大的功能,一般由开发人员使用加载配置文件时会创建对象

3、IOC操作Bean管理(基于xml)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kisQIIxf-1620445054501)(img/QQ截图20210401094245.png)]

1、Spring创建对象
<bean id="user" class="com.hello.test.User"></bean>

在这里插入图片描述

2、Spring依赖注入的两种方式:
  • 构造方法

  • set方法

    private UserDao userDao;
    
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
    
    <bean id="userService" class="com.hello.service.impl.UserServiceImpl">
            <property name="userDao" ref="userDao"></property>
        </bean><bean id="userService" class="com.hello.service.impl.UserServiceImpl">
            <property name="userDao" ref="userDao"></property>
        </bean>
    <!--通过p命名空间引入-->
    <!--<bean id="userService" class="com.hello.service.impl.UserServiceImpl" p:userDao-ref="userDao"/>-->
    
3、Bean的依赖注入的数据类型
  • 普通数据类型

  • 引用数据类型

  • 集合数据类型

  • package com.hello.dao.impl;
    
    import com.hello.dao.UserDao;
    import com.hello.domain.User;
    
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;
    
    public class UserDaoImpl implements UserDao {
    
        private List<String> strList;
        private Map<String, User> userMap;
        private Properties properties;
    
        public void setStrList(List<String> strList) {
            this.strList = strList;
        }
    
        public void setUserMap(Map<String, User> userMap) {
            this.userMap = userMap;
        }
    
        public void setProperties(Properties properties) {
            this.properties = properties;
        }
    
        //普通数据类型
        private String username;
        private int age;
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public void save() {
    //        System.out.println(username+"=="+age);
            System.out.println(strList);
            System.out.println(userMap);
            System.out.println(properties);
            System.out.println("save()方法");
        }
    }
    
    
    <bean id="userDao" class="com.hello.dao.impl.UserDaoImpl">
            <property name="strList">
                <list>
                    <value>aaa</value>
                    <value>bbb</value>
                    <value>ccc</value>
                </list>
            </property>
            <property name="userMap">
                <map>
                    <entry key="u1" value-ref="user1"/>
                    <entry key="u2" value-ref="user2"/>
                </map>
            </property>
            <property name="properties">
                <props>
                    <prop key="p1">ppp1</prop>
                    <prop key="p2">ppp2</prop>
                    <prop key="p3">ppp3</prop>
                </props>
            </property>
        </bean>
        <bean id="user1" class="com.hello.domain.User">
            <property name="name" value="tom"/>
            <property name="addr" value="beijing"/>
        </bean>
        <bean id="user2" class="com.hello.domain.User">
            <property name="name" value="lucy"/>
            <property name="addr" value="shandong"/>
        </bean>
    
    <!--普通数据类型-->
        <bean id="userDao" class="com.hello.dao.impl.UserDaoImpl">
            <property name="username" value="zhangsan"/><!--对象用ref,普通数据用value-->
            <property name="age" value="18"/>
        </bean>
    
4、

在这里插入图片描述

5、import引入其他配置文件(分模块开发)

3.数据源

数据源(连接池)的作用
  • 数据源(连接池)是提高程序性能如出现的。事先实例化数据源,初始化部分连接资源·使用连接资源时从数据源中获取

  • 数据源(连接池)是提高程序性能如出现的.事先实例化数据源,初始化部分连接资源

  • 使用连接资源时从数据源中获取

  • 使用完毕后将连接资源归还给数据源

  • 常见的数据源(连接池):DBCP、C3PO、BoneCP、Druid等

public class DataSourceTest {

    //测试spring容器产生数据源对象
    @Test
    public void test4() throws Exception {
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        DataSource dataSource = app.getBean(DataSource.class);
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        connection.close();


    }

    //测试手动创建c3p0 数据源(加载properties配置文件)
    @Test
    public void test3() throws Exception {
        ResourceBundle rb = ResourceBundle.getBundle("jdbc");
        String driver = rb.getString("jdbc.driver");
        String url = rb.getString("jdbc.url");
        String username = rb.getString("jdbc.username");
        String password = rb.getString("jdbc.password");
        //创建数据源,设置连接参数
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(username);
        dataSource.setPassword(password);
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        connection.close();

    }

    //测试手动创建druid数据源
    @Test
    public void test2() throws Exception {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=UTC&rewriteBatchedStatements=true&useServerPstmts=true");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        DruidPooledConnection connection = dataSource.getConnection();
        System.out.println(connection);
        connection.close();

    }

    //测试手动创建c3p0 数据源
    @Test
    public void test1() throws Exception {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test?serverTimezone=UTC&rewriteBatchedStatements=true&useServerPstmts=true");
        dataSource.setUser("root");
        dataSource.setPassword("123456");
        Connection connection =dataSource.getConnection();
        System.out.println(connection);
        connection.close();

    }
}

applicationContextxml加载jdbc.properties配置文件获得连接信息。

1、引入context命名空间
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值