Spring学习2--IOC应用

Spring容器使用setter和构造器注入实现依赖注入
本文详细介绍了Spring容器如何使用setter注入和构造器注入方式实现依赖注入,通过具体示例展示了如何配置applicationContext.xml文件来完成参数传递。

Spring容器使用了依赖注入DI的方式实现了IOC控制


Setter注入方式

示例如下:
JDBCDataSource类封装了链接数据库的方法和一些必要参数,现在要通过setter注入方式把这些参数传入JDBCDataSource类中。

package com.test.dao;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JDBCDataSource implements Serializable{
    private String driver;
    private String url;
    private String user;
    private String pwd;
    public String getDriver() {
        return driver;
    }
    public void setDriver(String driver) {
        try {
            //注册数据库驱动
            Class.forName(driver);
            this.driver = driver;
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getUser() {
        return user;
    }
    public void setUser(String user) {
        this.user = user;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public Connection getConnection() throws SQLException{
        Connection conn = DriverManager.getConnection(url, user, pwd);
        return conn;
    }
    public void close(Connection conn){
        if(conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

applicationContext.xml中的配置如下:

<?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" xmlns:util="http://www.springframework.org/schema/util"  
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
    <!-- setter注入 -->
    <bean id="dataSource" class="com.test.dao.JDBCDataSource">
        <property name="driver" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost/test?characterEncoding=UTF8&amp;zeroDateTimeBehavior=convertToNull"></property>
        <property name="user" value="root"></property>
        <property name="pwd" value="123"></property>
    </bean>
</beans>

这样,就可以通过spring的setter注入方式将参数传入该类中了。


构造器注入方式

示例:
MysqlUserDao类中的findByName方法,从数据库中查找对象,需要依赖于JDBCDataSource的属性,利用JDBCDataSource 获得数据库的连接,进行查询。

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.test.entity.User;
public class MysqlUserDao implements UserDao{
    private JDBCDataSource dataSource;
    //创建JDBCDataSource对象必须依赖于JDBCDataSource实例,进行构造器注入!
    public MysqlUserDao(JDBCDataSource dataSource){
        this.dataSource = dataSource;
    }
    public User findByName(String name) {
        System.out.println("利用JDBC技术查找信息");
        String sql = "select * from Users where name=?";
        Connection conn = null;
        try {
            conn = dataSource.getConnection();
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, name);
            ResultSet rs = ps.executeQuery();
            User user = null;
            while(rs.next()){
                user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                user.setPwd(rs.getString("pwd"));
                user.setPhone(rs.getString("phone"));
            }
            rs.close();
            ps.close();
            return user;
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            dataSource.close(conn);
        }
        return null;
    }
}

applicationContext.xml的文件中添加配置如下:

    <!-- setter注入 -->
    <bean id="dataSource" class="com.test.dao.JDBCDataSource">
        <property name="driver" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost/test?characterEncoding=UTF8&amp;zeroDateTimeBehavior=convertToNull"></property>
        <property name="user" value="root"></property>
        <property name="pwd" value="123"></property>
    </bean>
    <!-- 构造器注入 -->
    <bean id="userDao" class="com.test.dao.MysqlUserDao">
        <!-- 利用构造器的参数注入bean的属性 -->
        <constructor-arg index="0" ref="dataSource"></constructor-arg>
    </bean>

以上配置完成了dataSource的构造器注入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值