Spring——依赖注入、自动装配、集合注入、数据源对象管理

目录

1.依赖注入方式

1.1 setter注入​编辑

1.2 构造器注入

解耦的另外两种参数配置

1.3 依赖注入方式选择​编辑

2.依赖自动装配

3. 集合注入

4.数据源对象管理

4.1在applicationContext.xml中配置

4.2 加载properties文件


1.依赖注入方式

1.1 setter注入

public class BookDaoImpl implements BookDao {
    //setter注入——基本类型
    private int dataConnectionNum;//可以动态配置
    private String dataBaseName;//可以动态配置

    public void setDataConnectionNum(int dataConnectionNum) {
        this.dataConnectionNum = dataConnectionNum;
    }

    public void setDataBaseName(String dataBaseName) {
        this.dataBaseName = dataBaseName;
    }

    public void save() {
        System.out.println("BookDaoImpl save()"+" databaseName:"+dataBaseName+" dataConnectionNum:"+dataConnectionNum);
    }
}


public class UserDaoImpl implements UserDao {
    public void save() {
        System.out.println("UserDaoImpl save()");
    }
}

public class ServiceImpl implements Service {
    //setter注入——引用类型
    private BookDao bookDao;
    private UserDao userDao;

    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void save() {
        System.out.println("ServiceImpl save()");
        bookDao.save();
        userDao.save();
    }
}


public class App {
    public static void main(String[] args) {
        //获取IoC容器
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        //获取bean(根据bean配置id获取)
        Service service = (Service) ctx.getBean("service");
        service.save();


        //控制台:
        //ServiceImpl save()
        //BookDaoImpl save() databaseName:MySQL dataConnectionNum:10 //可以动态获取
        //UserDaoImpl save()
    }
}
    <bean id="userDao" class="com.dao.impl.UserDaoImpl"/>
    
    <bean id="bookDao" class="com.dao.impl.BookDaoImpl">
        <!--setter注入——基本类型-->
        <property name="dataBaseName" value="MySQL"/>
        <property name="dataConnectionNum" value="10"/>
    </bean>
    
    <bean id="service" class="com.service.impl.ServiceImpl">
        <!--setter注入——引用类型-->
        <property name="bookDao" ref="bookDao"/>
        <property name="userDao" ref="userDao"/>
    </bean>

1.2 构造器注入

 

public class BookDaoImpl implements BookDao {
    //setter注入——基本类型
    private String dataBaseName;//可以动态配置
    private int dataConnectionNum;//可以动态配置

    public BookDaoImpl(String dataBaseName, int dataConnectionNum) {
        this.dataBaseName = dataBaseName;
        this.dataConnectionNum = dataConnectionNum;
    }

    public void save() {
        System.out.println("BookDaoImpl save()"+" databaseName:"+dataBaseName+" dataConnectionNum:"+dataConnectionNum);
    }
}

public class UserDaoImpl implements UserDao {
    public void save() {
        System.out.println("UserDaoImpl save()");
    }
}


public class ServiceImpl implements Service {
    //setter注入——引用类型
    private BookDao bookDao;
    private UserDao userDao;

    public ServiceImpl(BookDao bookDao, UserDao userDao) {
        this.bookDao = bookDao;
        this.userDao = userDao;
    }

    public void save() {
        System.out.println("ServiceImpl save()");
        bookDao.save();
        userDao.save();
    }
}


public class App {
    public static void main(String[] args) {
        //获取IoC容器
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        //获取bean(根据bean配置id获取)
        Service service = (Service) ctx.getBean("service");
        service.save();


        //控制台:
        //ServiceImpl save()
        //BookDaoImpl save() databaseName:MySQL dataConnectionNum:10 //可以动态获取
        //UserDaoImpl save()
    }
}
    <!--标准写法-->
    <bean id="userDao" class="com.dao.impl.UserDaoImpl"/>

    <bean id="bookDao" class="com.dao.impl.BookDaoImpl">
        <!--构造器注入——基本类型-->
        <constructor-arg name="dataBaseName" value="MySQL"/>
        <constructor-arg name="dataConnectionNum" value="10"/>
    </bean>

    <bean id="service" class="com.service.impl.ServiceImpl">
        <!--构造器注入——引用类型-->
        <!--name是构造方法中的参数名称,ref是bean的id-->
        <constructor-arg name="bookDao" ref="bookDao"/>
        <constructor-arg name="userDao" ref="userDao"/>
    </bean>

解耦的另外两种参数配置

    <!--解决形参名问题-->
    <bean id="userDao" class="com.dao.impl.UserDaoImpl"/>

    <bean id="bookDao" class="com.dao.impl.BookDaoImpl">
        <!--构造器注入——基本类型-->
        <constructor-arg type="java.lang.String" value="MySQL"/>
        <constructor-arg type="int" value="10"/>
    </bean>

    <bean id="service" class="com.service.impl.ServiceImpl">
        <!--构造器注入——引用类型-->
        <!--name是构造方法中的参数名称,ref是bean的id-->
        <constructor-arg name="bookDao" ref="bookDao"/>
        <constructor-arg name="userDao" ref="userDao"/>
    </bean>

    <!--解决参数类型重复问题,使用参数位置匹配-->
    <bean id="userDao" class="com.dao.impl.UserDaoImpl"/>

    <bean id="bookDao" class="com.dao.impl.BookDaoImpl">
        <!--构造器注入——基本类型-->
        <constructor-arg index="0" value="MySQL"/>
        <constructor-arg index="1" value="10"/>
    </bean>

    <bean id="service" class="com.service.impl.ServiceImpl">
        <!--构造器注入——引用类型-->
        <!--name是构造方法中的参数名称,ref是bean的id-->
        <constructor-arg name="bookDao" ref="bookDao"/>
        <constructor-arg name="userDao" ref="userDao"/>
    </bean>

1.3 依赖注入方式选择

2.依赖自动装配

    <!--自动装配-->
    <!--按类型自动装配   常用!!!!!!!-->
    <bean id="service" class="com.service.impl.ServiceImpl" autowire="byType"/>

3. 集合注入

public class BookDaoImpl implements BookDao {

    private int[] arr;
    private List<String> list;
    private Set<String> set;
    private Map<String, String> map;
    private Properties properties;

    public void setArr(int[] arr) {
        this.arr = arr;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public void setSet(Set<String> set) {
        this.set = set;
    }

    public void setMap(Map<String, String> map) {
        this.map = map;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    public void print() {
        System.out.println(Arrays.toString(arr));
        System.out.println(list);
        System.out.println(set);
        System.out.println(map);
        System.out.println(properties);
    }
}
    <bean id="bookDao" class="com.dao.impl.BookDaoImpl">
        <property name="arr">
            <array>
                <value>100</value>
                <value>200</value>
                <value>300</value>
            </array>
        </property>
        <property name="list">
            <list>
                <value>zhangsan</value>
                <value>lisi</value>
                <value>wangwu</value>
            </list>
        </property>
        <property name="set">
            <set>
                <value>zhangsan</value>
                <value>lisi</value>
                <value>wangwu</value>
            </set>
        </property>
        <property name="map">
            <map>
                <entry key="zhangsan" value="30"/>
                <entry key="lisi" value="20"/>
                <entry key="wangwu" value="25"/>
            </map>
        </property>
        <property name="properties">
            <props>
                <prop key="zhangsan">30</prop>
                <prop key="lisi">20</prop>
                <prop key="wangwu">25</prop>
            </props>
        </property>
        
    </bean>
    public static void main(String[] args) {
        //获取IoC容器
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        //获取bean(根据bean配置id获取)
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");

        bookDao.print();
        //[100, 200, 300]
        //[zhangsan, lisi, wangwu]
        //[zhangsan, lisi, wangwu]
        //{zhangsan=30, lisi=20, wangwu=25}
        //{zhangsan=30, lisi=20, wangwu=25}
    }
}


4.数据源对象管理

4.1在applicationContext.xml中配置

4.2 加载properties文件
 

<?xml version="1.0" encoding="UTF-8"?>
<!--suppress ALL -->
<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
">

    <!--1.开启context命名空间-->

    <!--2.使用context空间加载properties文件-->
    <context:property-placeholder location="druid.properties"/>

    <!--3.使用&{}读取properties文件中的属性-->
    <bean name="dataSorse" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${druid.driverClassName}"/>
        <property name="url" value="${druid.url}"/>
        <property name="username" value="${druid.username}"/>
        <property name="password" value="${druid.password}"/>
    </bean>

</beans>

注意!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值