Spring学习2--IOC应用

来源:互联网 发布:廖雪峰 java教程 网盘 编辑:程序博客网 时间:2024/06/15 14:39

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的构造器注入。

0 0
原创粉丝点击