Spring学习总结二——SpringIOC容器二
一:指定bean的依赖关系
例如examplebean对象依赖examplebean1对象,那么在创建examplebean对象之前就
需要先创建examplebean1对象。
1:创建Examplebean1类:
/**
*
*/
package com.hlcui.dao; /**
* @author Administrator
*
*/
public class ExampleBean1 {
public ExampleBean1() {
System.out.println("实例化ExampleBean1...");
}
}
2:在spring容器配置文件中配置ExampleBean1对象,并且指定bean的依赖关系
depends-on="ExampleBean1"
<!-- 实例化ExampleBean对象 -->
<bean id="exampleBean" class="com.hlcui.dao.ExampleBean" lazy-init="true"
init-method="init" destroy-method="destroy" scope="singleton" depends-on="ExampleBean1"></bean> <!-- 实例化ExampleBean1对象 -->
<bean id="ExampleBean1" class="com.hlcui.dao.ExampleBean1"
lazy-init="true"></bean>
3:运行测试方法:
@Test
/**测试bean的依赖关系*/
public void testNewExampleBean() {
ApplicationContext ac = getApplicationContext();
ExampleBean eb1 = ac.getBean("exampleBean", ExampleBean.class);
System.out.println(eb1);
}

通过结果可以看出先实例化依赖对象,再创建对象。
二:spring实现setter注入到jdbcDatasource数据库连接参数
1:导入jar包,在spring原有的支持包的基础上导入,oracle数据库的驱动包

2:创建JDBCDataSource类
/**
*
*/
package com.hlcui.dao; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException; /**
* @author Administrator
*
*/
public class JDBCDataSource { private String driverClass; private String url; private String username; private String password; public String getDriverClass() {
return driverClass;
} public void setDriverClass(String driverClass) {
try {
Class.forName(driverClass); // 注册数据库驱动
this.driverClass = driverClass;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} } public String getUrl() {
return url;
} public void setUrl(String url) {
this.url = url;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} // 获取数据库连接
public Connection getConn() throws SQLException {
return DriverManager.getConnection(url, username, password);
} // 关闭数据库连接
public void closeConn(Connection conn) {
if (null != conn) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
3:配置bean对象
核心代码如下:
<!-- 配置jdbc数据源 -->
<bean id="jdbcDatasource" class="com.hlcui.dao.JDBCDataSource">
<property name="driverClass" value="oracle.jdbc.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
<property name="username" value="system"></property>
<property name="password" value="orcl"></property>
</bean>
4:测试方法以及运行结果
@Test
/**测试获取jdbc连接*/
public void testJdbcConnection() {
try {
ApplicationContext ac = getApplicationContext();
JDBCDataSource ds = ac.getBean("jdbcDatasource",
JDBCDataSource.class);
System.out.println(ds.getConn());
} catch (Exception e) {
e.printStackTrace();
} }

从运行结果可以看出,得到了jdbc连接对象。
三:spring实现构造器注入参数
1:创建业务实体类对象User
/**
*
*/
package com.hlcui.dto; /**
* @author Administrator
*
*/
public class User {
private int id;
private String name;
private String pwd;
private String phone;
public User(int id, String name, String pwd, String phone) {
super();
this.id = id;
this.name = name;
this.pwd = pwd;
this.phone = phone;
}
public User(String name, String pwd, String phone) {
super();
this.name = name;
this.pwd = pwd;
this.phone = phone;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((phone == null) ? 0 : phone.hashCode());
result = prime * result + ((pwd == null) ? 0 : pwd.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (id != other.id)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (phone == null) {
if (other.phone != null)
return false;
} else if (!phone.equals(other.phone))
return false;
if (pwd == null) {
if (other.pwd != null)
return false;
} else if (!pwd.equals(other.pwd))
return false;
return true;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", phone=" + phone
+ ", pwd=" + pwd + "]";
} }
2:创建oracle的sql脚本,并且执行sql
--创建表users
Create Table Users(
Id Number(6,2),
Name Varchar2(30),
Pwd Varchar2(50),
Phone Varchar2(50),
Primary Key(Id),
constraint name unique(name)
); --创建序列
Create Sequence Seq_Users; --向表中插入数据
Insert Into Users (Id,Name,Pwd,Phone) Values(Seq_Users.Nextval,'Tom','','');
Insert Into Users (Id,Name,Pwd,Phone) Values(Seq_Users.Nextval,'Jack','','');
Insert Into Users (Id,Name,Pwd,Phone) Values(Seq_Users.Nextval,'Lucy','','');
commit;
3:创建UserDAO接口以及其实现类
package com.hlcui.dao; import com.hlcui.dto.User; /**
* @author Administrator
*
*/
public interface UserDAO {
public User findByName(String name);
}
/**
*
*/
package com.hlcui.dao.impl; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import com.hlcui.dao.JDBCDataSource;
import com.hlcui.dao.UserDAO;
import com.hlcui.dto.User; /**
* @author Administrator
*
*/
public class OracleUserDAO implements UserDAO { private JDBCDataSource jdbcDataSource; public OracleUserDAO(JDBCDataSource jdbcDataSource) {
this.jdbcDataSource = jdbcDataSource;
} public User findByName(String name) {
Connection conn = null;
PreparedStatement prep = null;
ResultSet rs = null;
User user = null;
try {
conn = jdbcDataSource.getConn();
String sql = "select id,pwd,phone from users where name=?";
prep = conn.prepareStatement(sql);
prep.setString(1, name);
rs = prep.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String pwd = rs.getString("pwd");
String phone = rs.getString("phone");
user = new User(id, name, pwd, phone);
}
} catch (Exception e) {
e.printStackTrace();
}
return user;
} }
注:这里使用preparedstatement进行预编译,可以有效的防止sql注入,select * from tableName where username='' and password = '' or 1=1,
这里的1=1是无论什么条件都会满足的,所以会登录进网站。经常使用ibatis框架的朋友对 where 1=1 and ... 比较熟悉,这里是为了防止后面的sql动态拼接
不满足条件造成 select * from tableName where 这种情况,这里区分一下。
4:在spring容器配置文件配置OracleUserDao的bean对象
<!-- 配置jdbc数据源 -->
<bean id="jdbcDatasource" class="com.hlcui.dao.JDBCDataSource">
<property name="driverClass" value="oracle.jdbc.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
<property name="username" value="system"></property>
<property name="password" value="orcl"></property>
</bean> <!-- 配置userDao对象 -->
<bean id="userDao" class="com.hlcui.dao.impl.OracleUserDAO">
<constructor-arg index="0" ref="jdbcDatasource"/>
</bean>
constructor-arg元素代表构造器注入,index是参数的下表,0说明是第一个元素,如果有多个参数,可以使用如下格式:
<constructor-arg index="0">
<value>first parameter</value>
</constructor-arg>
<constructor-arg index="1">
<value>second parameter</value>
</constructor-arg>
5:测试读取数据库中的user对象
@Test
/**测试从oracle数据库中读取数据*/
public void testGetUser() {
ApplicationContext ac = getApplicationContext();
UserDAO dao = ac.getBean("userDao", OracleUserDAO.class);
User user = dao.findByName("Tom");
System.out.println(user);
}

成功读取User对象!
Spring学习总结二——SpringIOC容器二的更多相关文章
- Spring学习总结四——SpringIOC容器四
一:spring容器给bean对象注入属性值 1:注入基本属性值 a. 创建MessageBean类: /** * */ package com.hlcui.dao; /** * @author Ad ...
- Spring学习总结三——SpringIOC容器三
一:spring容器自动装配注入 为了减少xml中配置内容,可以使用自动装配注入,代替setter注入,只需要在 bean对象配置中添加属性autoWire即可,那么在类中就会自动扫描setXXX() ...
- Spring学习总结一——SpringIOC容器一
什么是spring spring是一个开源的轻量级的应用开发框架,它提供了IOC和AOP应用,可以减少组件之间的耦合度,即 解耦,spring容器可以创建对象并且管理对象之间的关系. 一:实例化spr ...
- Spring学习总结五——SpringIOC容器五
一:spring组件扫描 可以使用注解的方式,代替在xml配置文件配置bean,可以减少配置文件的书写,只需要在spring容器配置 文件中配置<context:component-scan b ...
- Spring学习--通过注解配置 Bean (二)
在 classpath 中扫描组件: 当在组件类上使用了特定的注解之后 , 还需要在 Spring 的配置文件中声明 <context:component-scan>: base-pack ...
- 三、spring成长之路——springIOC容器详解(上)
目录 一.springIOC 一.springIOC 控制反转和依赖注入: 简单的说就是将对象的创建,属性的的设置交给spring容器进行管理,而不再由用户自己创建,当用户需要使用该接口或者类的时 ...
- 四、spring成长之路——springIOC容器(下)
目录 5.spring注解开发(Spring扩展知识) 5.1定义配置类:@Configuration 声明一个类为IOC容器 @Bean定义一个Bean 5.2.按照条件进行注入 5.3.@Impo ...
- Spring学习记录1——IoC容器
IoC容器 1.1 IoC概述 Ioc(Inverse of Control,控制反转)是Spring容器的内核.对于软件来说,即某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定,即由 ...
- Spring学习一: Ioc容器
Spring 容器: Spring 容器是Spring框架的核心.Spring容器将创建Bean对象实例,把它们联系在一起,配置它们,并管理它们整个生命周期从创建到销毁.Spring 容器通 ...
随机推荐
- My集合框架第六弹 左式堆
左式堆(Leftist Heaps)又称作最左堆.左倾堆.左式堆作为堆的一种,保留了堆的一些属性. 第1,左式堆仍然以二叉树的形式构建: 第2,左式堆的任意结点的值比其子树任意结点值均小(最小堆的特性 ...
- sql with(lock) 与事务
sql select查询语句 表后面携带 with(nolock) 会获取到 在事务中已经执行 但还未完成提交的 记录 即使表被锁住也能查询到 当事务最终执行失败时 查询到的记录可能没有啦 不 ...
- Android与.Net交互模拟用户屏幕操作添加APN和网络4G/3G切换
前几天接到一个需求,我们的客户需要对手机网络接入点进行可用性测试,简单点说就是需要实现Android上的APN配置的添加,APN切换网络模式4G/3G/2G切换,我要调研下写个demo. 因为是要实现 ...
- CI reids 缓存
注意:在项目中的application/libraries 中自己定义的类最好不要以cache命名. 连接 Redis 服务器的配置信息必须保存到 application/config/redis.p ...
- 系列文章--JavaScript教程文章
JavaScript教程文章专题列表如下: 我们应该如何去了解JavaScript引擎的工作原理 JavaScript探秘:编写可维护的代码的重要性 JavaScript探秘:谨慎使用全局变量 Jav ...
- Flex4 DataGrid ItemRenderer内嵌方式
Flex4 DataGrid ItemRenderer像Flex3一直内嵌ItemRenderer会报空对象引用的错误,如: <s:GridColumn dataField="titl ...
- 记一次Time-Wait导致的问题
去年(2014年)公司决定服务框架改用Finagle(后续文章详细介绍),but 公司业务系统大部分是C#写的,然后 finagle只提供了 scala/java 的Client 于是 只能自己动手丰 ...
- opencv官网
http://wiki.opencv.org.cn/index.php/Template:Doc
- C# Redis分布式缓存
C# Redis实战(七) 七.修改数据 在上一篇 C# Redis实战(六)中介绍了如何查询Redis中数据,本篇将介绍如何修改Redis中相关数据.大家都知道Redis是key-value型存储系 ...
- C++将username部分用*取代
简要:非常多时候中奖用户并不希望让别人知道他的ID.程序中我们就将他们的账号部分设置为*号显示. 比如:王小二->王*二. asadjsahd->a*********d. 代码: #inc ...