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 容器通 ...
随机推荐
- web/jdbc数据库带实例名连接2008
--------------------------数据库带实例名连接2008-------------------------------------<property name=" ...
- HTML第七天学习笔记
今天主要是学习如何使用JS,第一个就是先是使用JS输出"Hello world" <!doctype html> <html lang="en" ...
- RHEL 5.4下部署LVS(DR)+keepalived实现高性能高可用负载均衡
原文地址:http://www.cnblogs.com/mchina/archive/2012/05/23/2514728.html 一.简介 LVS是Linux Virtual Server的简写, ...
- WEB前端性能优化小结
转:http://www.gafish.net/archives/1514 对前端开发工程师来说,前端性能优化的重要性是不言而喻的,最为大家所知的是YSLOW的23条优化规则,在我的理解中,性能优化不 ...
- C#使用System.Data.SQLite操作SQLite
使用System.Data.SQLite 下载地址:http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki 得到Sy ...
- 从来没有天才 靠自己创造未来——Leo鉴书(29)
之前在网上跟朋友们聊起天才这个话题,我认来从来没什么所谓天才,有朋友认为有的,只是我们定义不同,要不你看看苏轼? 持天才论者持两个观点:有些人天生擅长干某些事儿,也许是基因作怪:有些人的能力是上帝或者 ...
- linux C(hello world)最大公约数和最小公倍数
# include <stdio.h> int main(void) { int x, y,temp; int r; printf("请输入两个正整数:\n"); sc ...
- 实现顶部轮播,下部listview经典布局的两种方式
开头: 在做android开发的时候,我们经常会遇到这样的布局,上面是一个图片轮播图,下面是一些列表的项目.很多新闻app,视频类app都采用这样的布局.起初的时候 由于没有很多参考,我自己想到了一种 ...
- (转)ASP.NET Identity登录原理 - Claims-based认证和OWIN
在Membership系列的最后一篇引入了ASP.NET Identity,看到大家对它还是挺感兴趣的,于是来一篇详解登录原理的文章.本文会涉及到Claims-based(基于声明)的认证,我们会详 ...
- paip.android 手机输入法制造大法
paip.android 手机输入法制造大法 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/at ...