体验Spring的“IoC容器”对开发过程中的简化

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介:
问题:设计一个 DAO组件,完成对某个数据库表的操作----DataSource也注入到我们的程序中。
1、在本项目中再增加一个DAO的接口
名称为DAOInterface,包名称为springj2seapp
在该接口中增加一个方法的定义
package springj2seapp;
import java.sql.ResultSet;
public interface DAOInterface
{
        public ResultSet SelectDBData(String select_SqlStatement);    //代表对数据的查询
public void closeCon();
}
2、再对该接口加以实现
       类名称为DAOInterfaceImpl,包名称为springj2seapp
编程该DAO组件类
package springj2seapp;
import java.sql.*;
import javax.sql.DataSource;
public class DAOInterfaceImpl implements DAOInterface
{
        DataSource dataSource=null;
        Connection con=null;
//以便能够将dataSource以属性注入的方式来注入
        public void setDataSource(DataSource dataSource)
        {
                  this.dataSource = dataSource;
        }
       public DAOInterfaceImpl()
       {
              super();
              // TODO 自动生成构造函数存根
       }
       public ResultSet SelectDBData(String select_SqlStatement)
       {
           try
           {
             con = dataSource.getConnection();
           }
           catch (SQLException ex)
           {
             System.out.println(ex.getMessage());
           }
           ResultSet rs=null;
           try
           {
             java.sql.PreparedStatement pstmt = con.prepareStatement(select_SqlStatement,
                 ResultSet.TYPE_SCROLL_SENSITIVE,
                 ResultSet.CONCUR_UPDATABLE);
             rs = pstmt.executeQuery();
           }
           catch (SQLException e)
           {
             System.out.println(e.getMessage());
           }
              return rs;
       }
       public void closeCon()
       {
              try
              {
                     con.close();
              }
              catch (SQLException e)
              {
                      System.out.println(e.getMessage());
              }
       }
}
3、修改前面的业务组件类
package springj2seapp;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
public class UserInfoManage implements UserInfoInterface
{
       boolean okOrNot;
       private Date dateBean=null;  
       DAOInterface oneDAOBean=null;   
       public UserInfoManage()
       {
新增加一个 DAO 的对象参数
              super();
              // TODO 自动生成构造函数存根
       }
       public UserInfoManage(UserInfoVO oneUserInfo, Date dateBean, DAOInterface oneDAOBean)
       {
              this.dateBean=dateBean;
              this.oneDAOBean=oneDAOBean;
              doUserLogin(oneUserInfo);
              // TODO 自动生成构造函数存根
       }
       public  boolean doUserLogin(UserInfoVO oneUserInfo)
       {
              String userName=oneUserInfo.getUserName();
              String userUserPassWord=oneUserInfo.getUserPassWord();             
              String sqlText="select * from userInfo where userName ='"+userName+
                                       "' and userPassWord ='"+userUserPassWord+"'";
              ResultSet rs=oneDAOBean.SelectDBData(sqlText);
              try
              {
                     if(rs.next())
                     {
                            okOrNot=true;
                     }
                     else
                     {
                            okOrNot=false;
                     }
              }
              catch (SQLException e)
              {
                     e.printStackTrace();
记得注释掉下面的哦
              }
              oneDAOBean.closeCon();
              //okOrNot=userName.equals("yang")&&userUserPassWord.equals("1234");
              String loginTime=dateBean.toLocaleString();
              System.out.println("您的登录时间是:"+loginTime);
              return okOrNot;
       }
       public boolean getUserLogin()
       {
              return okOrNot;
       }    
}
4、在*.xml配置文件中添加DataSource以及DAO组件的注入
<bean id="oneUserInfoManage" class="springj2seapp.UserInfoManage">
  <constructor-arg>
      <ref bean="oneUserInfo"/>
  </constructor-arg>
  <constructor-arg>
       <ref bean="dateBean"/>
  </constructor-arg>
  <constructor-arg>
       <ref bean="oneDAOBean"/>
  </constructor-arg>
</bean>
<bean id="oneUserInfo" class="springj2seapp.UserInfo">
此时的用户名称和密码可以是数据库表中存在的
    <property name="userName">
              <value>admin</value>
       </property>
新增加一个 DataSource 的声明
       <property name="userPassWord">
              <value>admin</value>
       </property>
</bean>
  <bean id="dateBean" class="java.util.Date"/>   
  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
        </property>
        <property name="url">
            <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=WebStudyDB</value>
        </property>
        <property name="username">
            <value>sa</value>
        </property>
        <property name="password">
            <value>1234</value>
        </property>
</bean>
<bean id="oneDAOBean"  class="springj2seapp.DAOInterfaceImpl">
       <property name="dataSource">
新增加一个 DAO 组件的声明
              <ref bean="dataSource"/>
       </property>
</bean>
5、启动数据库服务器
并且应该有一个数据库文件WebStudyDB,在该数据库中有一个userInfo数据库表
用户帐号为sa,并且密码为1234
6、将SQLServer2000JDBC驱动程序的*.jar文件导入到我们的项目中
msbase.jarmssqlserver.jarmsutil.jar
7、执行本程序
将出现下面的登录成功的提示
8、体验IoCDAO 的松散的支持
也可以对前面的DataSource改变为Apache DBCPDataSourceorg.apache.commons.dbcp.BasicDataSource
1)将*.xml中的DataSource的创建的实现类由
org.springframework.jdbc.datasource.DriverManagerDataSource
改变为org.apache.commons.dbcp.BasicDataSource
注意:*.xml中的其它的配置标签不需要改变。
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName">
            <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
        </property>
        <property name="url">
            <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=WebStudyDB</value>
        </property>
        <property name="username">
            <value>sa</value>
        </property>
        <property name="password">
            <value>1234</value>
        </property>
</bean>
  
2)在本项目中添加对应的DBCP的驱动程序的*.jar包文件
commons-collections.jarcommons-dbcp- 1.2.1 .jarcommons-pool-1.2.jar
3)再执行该项目
将出现下面的登录成功的提示
 
 









本文转自 weijie@java 51CTO博客,原文链接:http://blog.51cto.com/weijie/66499,如需转载请自行联系原作者
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
26天前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
38 4
|
12天前
|
XML 缓存 Java
搞透 IOC、Spring IOC ,看这篇就够了!
本文详细解析了Spring框架的核心内容——IOC(控制反转)及其依赖注入(DI)的实现原理,帮助读者理解如何通过IOC实现组件解耦,提高程序的灵活性和可维护性。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
19天前
|
XML Java 数据格式
提升效率!Spring Boot 开发中的常见失误轻松规避
本文深入探讨了在 Spring Boot 开发中常见的失误,包括不当使用注解、不良异常处理、低效日志记录等,提供了有效的规避策略,帮助开发者提升代码质量和系统性能,构建更健壮、高效的应用程序。
|
23天前
|
Java 测试技术 Windows
咦!Spring容器里为什么没有我需要的Bean?
【10月更文挑战第11天】项目经理给小菜分配了一个紧急需求,小菜迅速搭建了一个SpringBoot项目并完成了开发。然而,启动测试时发现接口404,原因是控制器包不在默认扫描路径下。通过配置`@ComponentScan`的`basePackages`字段,解决了问题。总结:`@SpringBootApplication`默认只扫描当前包下的组件,需要扫描其他包时需配置`@ComponentScan`。
|
25天前
|
网络安全 Docker 容器
VScode远程服务器之远程 远程容器 进行开发(五)
VScode远程服务器之远程 远程容器 进行开发(五)
21 1
|
4天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
8 0
|
24天前
|
XML Java 数据格式
Spring IOC容器的深度解析及实战应用
【10月更文挑战第14天】在软件工程中,随着系统规模的扩大,对象间的依赖关系变得越来越复杂,这导致了系统的高耦合度,增加了开发和维护的难度。为解决这一问题,Michael Mattson在1996年提出了IOC(Inversion of Control,控制反转)理论,旨在降低对象间的耦合度,提高系统的灵活性和可维护性。Spring框架正是基于这一理论,通过IOC容器实现了对象间的依赖注入和生命周期管理。
61 0
|
9天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
5天前
|
关系型数据库 MySQL API
|
6天前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
下一篇
无影云桌面