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 容器通 ...
随机推荐
- hdoj 5391 Zball in Tina Town
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5391 相关数论结论: 威尔逊定理——当且仅当p为素数时:( p -1 )! ≡ p-1 ( mod p ...
- oracle 学习笔记--用户管理
oracle 用户管理 创建用户(需要具有dba权限的用户) create user 用户名 identified by 密码 defaule tablespace users //默认表空间 ...
- 关于WebPlayer Sandbox的小节
不可以像其他build target一样读写I/O 不可以call一些private或者internal methord 只要在一个top level的domain下可以不需要xml dmain po ...
- 第一章TP-Link 703N刷OpenWrt
1)下载编译好的固件 openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin openwrt-ar71xx-generic-tl-wr703n ...
- jquery validate使用
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- IAR USING PRE- AND POST-BUILD ACTIONS
Using pre-build actions for time stamping If necessary, you can specify pre-build and post-build act ...
- Java常见排序算法之直接选择排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- Java学习笔记之接口
一.接口的概念与定义 首先考虑一个简单的接口的定义: public interface Output { int MAX_LINE = 40; void out(); void getData(Str ...
- or1200下raw-os学习(任务篇)
这次就来说说基于上一节介绍的系统框图去建立我们所需要的任务,顺便学习Raw-OS提供的API,根据上节的分析,对于Slave Board有如下设计: Slave Board有三个任务,分别负责测试阻抗 ...
- C# OpenFileDialog和PictrueBox
string resultFile = ""; OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFile ...