`
lifaming15
  • 浏览: 64758 次
  • 来自: ...
文章分类
社区版块
存档分类

Spring从菜鸟到高手(三)依赖注入

 
阅读更多
Spring中有一个技术叫做依赖注入,而依赖注入又分为【构造函数】注入和【Set】注入,前面我们都看到了依赖注入的好处和方便之处,大家也许要问【Set】注入和【构造函数】注入有什么分别呢?
今天我将一个小例子展示给大家这个例子使用了Spring【构造函数】依赖注入方式,究竟【构造函数】【Set】这两种方法哪种好?要看用在什么地方,如果我们的一个属性要随着类的实例保持不变我们就选择使用构造方法注入,如果我们的一个属性变量在这个类的实例中会有可能改变,那么我们就选择Set注入。


这个例子主要演示的是通过构造函数来实现注入,因为我们这个类的功能是读取Properties文件的信息,以备后面的模块连接数据库,所以连接数据库的信息是不能改变的,将它通过构造函数注入是一个很好的 这样做的好处是 好我们现在就开始

这个类需要导入这几个包
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;


大家注意到这个类的构造方法有一个类型为String的参数负责传递进来一个文件名(相对路径),通过Class类的getResourceAsStream方法读取并且返回一个InputStream类型的对象,
InputStream getResourceAsStream(Stringname)
查找具有给定名称的资源。
然后java.util.Properties类的load方法将他读取进属性列表
void load(InputStreaminStream)
从输入流中读取属性列表(键和元素对)。



public class PropertiesConfig {

private Properties properties = null;

public PropertiesConfig(String fileUrl)throws IOException
{


InputStream ips = this.getClass().getResourceAsStream(fileUrl);//通过路径字符串得到一个流
if(ips == null)//判断路径的正确性,如果错误直接抛出异常,不允许向下进行
{
throw new IOException("The fileUrl is nullity !");
}
this.properties = new Properties();
properties.load(ips);//将得到的流读取进属性列表
}

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


}
XML配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "[url]http://www.springframework.org/dtd/spring-beans.dtd[/url]">
<beans>
<bean id="popertiesConfig" class="cn.incast.PropertiesConfig">
<constructor-arg>
<value>db.properties</value> <!--通过构造函数来注入-->
</constructor-arg>
</bean>
</beans>
db.properties文件的内容
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/itcast
jdbc.user=root
jdba.pass=
可是如果我们的【构造函数】有多个参数我们该怎么办呢?
我们可以使用<constructor-arg>的一个属性【index】

<constructor-arg index="1">
<value>db.properties</value> <!--通过构造函数来注入-->
</constructor-arg>
还可以使用<constructor-arg>的另一个属性【type】
<constructor-arg type="java.lang.String">
<value>db.properties</value> <!--通过构造函数来注入-->
</constructor-arg>
例子1、
<bean id="popertiesConfig" class="cn.incast.PropertiesConfig">
<constructor-arg index="1">
<value>db.properties</value> <!--构造函数参数1-->
</constructor-arg>
<constructor-arg index="1">
<value>db.properties</value> <!--构造函数参数2-->
</constructor-arg>

</bean>
例子2、

<bean id="popertiesConfig" class="cn.incast.PropertiesConfig">
<constructor-arg itypr="java.lang.String">
<value>db.properties</value> <!--构造函数参数1-->
</constructor-arg>
<!--遇到这种两个参数都是一个类型,并且无法分辨究竟哪个是第一个参数哪个是第二个参数就需要使用index了-->
<constructor-arg type="java.lang.String">
<value>db.properties</value> <!--构造函数参数2-->
</constructor-arg>

</bean>
----------------------------------------------
以下是通过Set注入的例子很简单,相信大家,一看就懂
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import java.util.logging.Logger;
/*
* 用于通过propertiesConfig文件建立连接
*
*/
public class ConnectionConfig {
private PropertiesConfig propertiesConfig = null;
private Logger log = Logger.getLogger("cn.incast.ConnectionConfig");

public Connection foundConnection()throws IOException,ClassNotFoundException,SQLException
{

Properties propts = null;
Connection cn = null;

propts = propertiesConfig.getProperties();
Class.forName(propts.getProperty("jdbc.driver"));
cn = DriverManager.getConnection(
propts.getProperty("jdbc.url"),
propts.getProperty("jdbc.user"),
propts.getProperty("jdbc.pass"));
return cn;
}

public void closeConnection(Connection cn)
{
if(cn !=null)
{
try
{
cn.close();
cn = null;
}
catch (SQLException e)
{log.warning("Connection call on error !");}
}
}
public void closeStatement(Statement stmt)
{
if(stmt !=null)
{
try
{
stmt.close();
stmt = null;
}
catch (SQLException e)
{log.warning("Statement call on error !");}
}
}public void closeResultSet(ResultSet rs)
{
if(rs !=null)
{
try
{
rs.close();
rs = null;
}
catch (SQLException e)
{log.warning("ResultSet call on error !");}
}
}
public PropertiesConfig getPropertiesConfig() {
return propertiesConfig;
}
public void setPropertiesConfig(PropertiesConfig propertiesConfig) {
this.propertiesConfig = propertiesConfig;
}

}
这个类是为我下一篇文章作铺垫的,我的下一篇文章是介绍Spring与数据库连接的一些小的心得,主要使用Spring连接数据库其中用到了JaKarta的BasicDtatSource数据源对象、Sql注入攻击以及JDBC调用MySql的存储过程和方法,敬请期待。

本文出自 “绝缘材料” 博客,请务必保留此出处http://tonyaction.blog.51cto.com/227462/42041

分享到:
评论

相关推荐

    spring菜鸟入门经典实例

    Spring框架是Java开发中的核心组件,它为应用程序提供了一个全面的基础设施,包括依赖注入(DI)、面向切面编程(AOP)以及各种企业级服务。本教程专为初学者设计,旨在帮助“菜鸟”快速掌握Spring的基本概念和实战...

    菜鸟 Spring 源码解读 推荐流程

    Spring框架是Java开发中广泛应用的一个开源框架,以其依赖注入(DI)和面向切面编程(AOP)为核心,极大地简化了企业级应用的开发。在本文中,我们将深入探讨Spring的源码,尤其是针对"菜鸟"级别的开发者如何逐步...

    spring_ioc.docx

    Spring 框架是 Java Web 开发中广泛使用的轻量级框架,其核心特性是控制反转 (IOC) 和依赖注入 (DI)。控制反转是指将对象的创建权从应用程序代码转移到框架,即不再由程序主动创建对象,而是由框架负责创建和管理。...

    最简单的spring demo

    首先,让我们从Spring的核心特性——依赖注入(Dependency Injection,DI)开始。依赖注入是一种设计模式,允许我们解耦组件之间的依赖关系。在Spring中,我们可以通过XML配置文件或注解来声明类的依赖。例如,我们...

    ssh框架整合jar包(struts2+spring4+hibernate4)

    - 整合:Struts2与Spring4的整合主要通过Spring插件,使得Action类可以直接注入Spring管理的Bean,便于依赖注入和事务管理。 2. **Spring4**: - Spring是全面的企业级应用框架,支持AOP(面向切面编程)、IOC...

    [网盘]java程序员由菜鸟到笨鸟.pdf

    - Spring框架的核心功能:DI(依赖注入)、AOP(面向切面编程)。 - Spring MVC的工作原理及开发实践。 - Spring Boot快速开发框架的介绍。 #### 五、实战案例篇 1. **小型Web应用程序开发**: - 使用Servlet...

    Spring+Spring MVC+Mybatis框架搭建

    **Spring框架**:Spring是一个全面的Java企业级应用开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等功能,简化了Java应用的开发。Spring的核心是容器,它可以管理对象的生命周期和对象间的依赖关系。...

    struts2与spring 最简单整合

    Struts2主要用于Web层的控制,提供MVC(Model-View-Controller)架构,而Spring则是一个全面的后端框架,涵盖了依赖注入、事务管理、数据访问等众多功能。将这两者整合,可以实现更高效、更灵活的应用开发。 一、...

    精通Spring 4.x 企业应用开发实战.pdf 和项目代码

    Spring是Java平台上广泛使用的轻量级框架,它的核心特性包括依赖注入(Dependency Injection,DI)、面向切面编程(Aspect-Oriented Programming,AOP)以及对各种企业服务的支持。Spring 4.x版本是其发展过程中的一...

    Spring相关的笔记,包含ioc、DI、AOP、Spring事务等等

    Spring框架是Java开发中不可或缺的一部分,它以其强大的依赖注入(DI)和面向切面编程(AOP)功能闻名。这份笔记涵盖了Spring的核心概念和技术,包括IOC(Inverse of Control,控制反转)、DI(Dependency Injection...

    Spring依赖包

    Spring是一个广泛使用的Java企业级应用开发框架,它提供了丰富的功能,包括依赖注入、面向切面编程、事务管理、数据访问以及Web应用程序的支持。 描述中的“spring-framework-dependencies”是指Spring框架的依赖...

    java笔记--从菜鸟到j2se j2ee高手之路

    Spring提供依赖注入、AOP(面向切面编程)等功能,简化了应用的构建和管理。Hibernate则是一种ORM解决方案,方便地将Java对象与数据库表进行映射,简化了数据库操作。 最后,实践是检验理论的最好方式。通过完成...

    struts2+spring练习

    这将使Struts2能够从Spring容器中获取Action实例,实现Action的依赖注入。配置通常包括修改`struts.xml`中的`&lt;package&gt;`标签,添加`parent="struts-default"`和`namespace="/"`, 并使用`&lt;action&gt;`标签的`class`属性...

    spring--5.1.5.RELEASE.jar.rar

    Spring Beans通过依赖注入(DI,Dependency Injection)来管理对象之间的关系,降低了对象间的耦合度。在5.1.5.RELEASE版本中,Spring Beans支持了更多类型的bean定义,如通过Java配置类、XML配置文件,以及@...

    Java26天从菜鸟到大师

    12. **Spring框架**:介绍Spring框架的基础知识,包括依赖注入(DI)、AOP(面向切面编程)和Spring Boot等。 13. **Maven或Gradle**:学习使用构建工具管理项目依赖,提升开发效率。 14. **单元测试**:理解JUnit...

    Spring初级讲解

    4. **节约维护成本**:通过依赖注入和面向切面编程,Spring降低了组件间的耦合,使系统更易于维护。 5. **解耦底层实现原理**:Spring的控制反转(IoC)和面向切面编程(AOP)帮助开发者解耦代码,实现松散耦合。 *...

    JAVAspring学习资料

    其中最核心的模块是Spring Core,它提供了IoC(控制反转)和DI(依赖注入)的功能,使得对象之间的依赖关系由框架来管理,降低了组件之间的耦合度。 Java Spring还包括以下重要模块: Spring MVC:用于构建Web应用...

    spring与mybatis整合所用的jar包

    Spring是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、事务管理等功能;而MyBatis则是一个轻量级的持久层框架,它将SQL语句与Java代码分离,使得数据库操作更加灵活和便捷。当我们将这两个框架...

    自定义MVC框架(spring)

    综上所述,自定义Spring MVC框架涉及到的主要知识点包括:MVC模式、请求分发、控制器设计、模型管理、视图解析、配置与依赖注入,以及Web应用的基本文件结构。通过实践这个项目,开发者可以深入理解Spring MVC的工作...

    spring所需jar包

    Spring框架是Java开发中不可或缺的一部分,它为开发者提供了丰富的功能,包括依赖注入、面向切面编程、事务管理、数据访问和Web应用支持等。在Java应用程序中使用Spring,通常需要引入一系列的jar包来实现其核心功能...

Global site tag (gtag.js) - Google Analytics