`

Spring使用之IOC配置篇

 
阅读更多

本计划分为四篇概括Spring常用的知识:IOC配置篇、AOP配置篇、IOC注解篇、AOP注解篇。

Spring核心分为IOC和AOP,这两点在我的工作中经常使用,DI又是IOC的核心实现,理论不多说,程序只有测试通过才能是真正的理解入门,其他一切空谈。

 

下面是接口:

package spring.config.iInterface;

public interface IUserDAO {
public void save();
public void delete();
}


 

下面是Action类:

package spring.config.service;

import spring.config.iInterface.IUserDAO;

public class UserAction {
private IUserDAO userDao;//接口类型

public String register(){
System.out.println("register()方法被调用...");
userDao.save();
userDao.delete();
return "success";
}

//setter方式注入,自动调用
public void setUserDao(IUserDAO userDao){
System.out.println("--setUserDao(UserDAO userDao)被调用...--");
this.userDao = userDao;
}

public IUserDAO getUserDao() {
return userDao;
}
}

 

 

package spring.config.service;

import spring.config.iInterface.IUserDAO;

public class UserAction1 {
private IUserDAO userDao;
//构造方法注入,自动调用
public UserAction1() {
System.out.println("---constructs----default--");
}

public UserAction1(IUserDAO userDao,int a){
System.out.println("---constructs--1--a:"+a);
this.userDao = userDao;
}

public UserAction1(IUserDAO userDao){
System.out.println("---constructs----2--");
this.userDao = userDao;
}

public String register(){
userDao.save();
userDao.delete();
return "success";
}
}

下面是bean类

package spring.config.bean;

import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class MessageBean {
private String username;
private String password;
private int size;
private List<String> citys;
private Set<String> friends;
private Map<Integer,String> books;
private Properties props;

public void show(){
System.out.println("用户名:"+username);
System.out.println("密码:"+password);
System.out.println("允许连接数:"+size);
System.out.println("-----城市列表-----");
for(String str:citys){
System.out.println(str);
}
System.out.println("-----朋友列表-----");
for(String str:friends){
System.out.println(str);
}
System.out.println("------图书列表------");
Set<Integer> keys = books.keySet();
for(Integer key:keys){
System.out.println(key+" "+books.get(key));
}
System.out.println("------系统参数信息-----");
Set<?> params = props.keySet();
for(Object obj:params ){
System.out.println(obj+" : "
+props.getProperty(obj.toString()));
}
}

public void setCitys(List<String> citys) {
this.citys = citys;
}

public void setBooks(Map<Integer, String> books) {
this.books = books;
}

public void setProps(Properties props) {
this.props = props;
}

public void setFriends(Set<String> friends) {
this.friends = friends;
}

public void setSize(int size) {
this.size = size;
}

public void setPassword(String password) {
this.password = password;
}

public void setUsername(String username) {
this.username = username;
}
}

 

下面是配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<!--
主要演示:
1、两种注入方式
2、复杂对象的property赋值设置
<property name="" ref="" value="">
<bean></bean>
<props></props>
<list></list>
<map></map>
<set></set>
</property>
-->
<beans>
<bean id="userdao" class="spring.config.impl.HibernateUserDAO">
</bean>

<!-- setter方式注入 -->
<bean id="useraction" class="spring.config.service.UserAction">
<property name="userDao" ref="userdao"></property>
</bean>

<!-- 构造器方式注入*****注:调用不同构造器需要配置多个不同的-->
<bean id="useraction1" class="spring.config.service.UserAction1">
<constructor-arg index="0" ref="userdao"/><!-- 该构造器中第一次参数、类型、引用 -->
<constructor-arg index="1" value="100" type="int"/><!-- 该构造器中第二次参数、类型、引用 -->
</bean>

<!-- 各种复杂类型值注入的写法 -->
<bean id="messagebean"
class="spring.config.bean.MessageBean">
<!-- private Properties props -->
<property name="props">
<props>
<prop key="url">http://www.tom.com</prop>
<prop key="username">zhangsan</prop>
<prop key="password">123456789</prop>
</props>
</property>

<!-- private Map<Integer,String> books -->
<property name="books">
<map>
<entry key="10" value="CoreJava">
</entry>
<entry key="11" value="JavaWeb">
</entry>
<entry key="12" value="SSH2">
</entry>
</map>
</property>

<!-- private Set<String> friends -->
<property name="friends">
<set>
<value>张三</value>
<value>李四</value>
<value>王五</value>
</set>
</property>

<!-- private List<String> citys -->
<property name="citys">
<list>
<value>北京</value>
<value>上海</value>
<value>深圳</value>
</list>
</property>

<!-- private String username -->
<property name="username">
<value>root</value>
</property>
<!-- private String username -->
<property name="password">
<value>1234</value>
</property>
<!-- private int size -->
<property name="size">
<value>15</value>
</property>
</bean>
</beans>
<!--
1、BeanFactory与ApplicationContext区别:
前者在需要时才调用bean实例化对象,
而后者默认是在XML一加载就会创建好各bean的实例(
当然可以通过设置singleton bean的lazy-load属性为true,来改变ApplicationContext的默认行为;)

bean依赖通常可以接受如下元素指定值:
value、ref、bean、list、map、props

2、总结:实际应用中,某个实例的属性值可能是某个方法的返回值、类的field值、属性值,
这种非常规注入方式,Spring同样支持
3、创建bean通常有如下方法:
*调用构造器创建一个bean实例
*BeanFactory调用某个类的静态工厂方法创建bean<单例模式>
*BeanFactory调用实例工厂方法创建bean<工厂模式>
-->

 

 

接下来呢,就是最后的测试类了:

package spring.config.test.ioc;

import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;

import spring.config.bean.MessageBean;
import spring.config.service.UserAction;
import spring.config.service.UserAction1;
/***
* 两种注入方式测试:
* @author Administrator
*1、采用setter方式注入
*2、采用constructs方式注入
*优缺点:
*1、setter方式注入:对构造器类型比较单一的,当指定参数不会参数冲突的可以用它,因为该方式
*没有参数类型的定义,<property name="" ref="" value=""></property>
*2、针对上述缺陷,有另一种构造器注入可以指定参数的类型
*<constructor-arg index="0" ref="userdao" type="int" value=""/>
*<constructor-arg index="1" ref="userdao" type="int" value=""/>
*state:success
*/
public class TestAction {
@Test
public void test(){
String configs = "src/spring/config/applicationContext.xml";
Resource r = new FileSystemResource(configs);
BeanFactory bf = new XmlBeanFactory(r);//bean元素工厂,他可以生产出类的实例
UserAction userAction =
(UserAction)bf.getBean("useraction");
userAction.register();
}

//@Test
public void test1(){
String configs = "src/spring/config/applicationContext.xml";
Resource r = new FileSystemResource(configs);
BeanFactory bf = new XmlBeanFactory(r);//bean元素工厂,他可以生产出类的实例
UserAction1 userAction1 =
(UserAction1)bf.getBean("useraction1");
userAction1.register();
}

/***
* 主要演示:
1、两张注入方式
2、复杂对象的property赋值设置
<property name="" ref="" value="">
<bean></bean>
<props></props>
<list></list>
<map></map>
<set></set>
</property>
* @author huawei
*
*/
//@Test
public void test2(){
String configs = "src/spring/config/applicationContext.xml";
Resource rs = new FileSystemResource(configs);
BeanFactory bf = new XmlBeanFactory(rs);
MessageBean msgBean =
(MessageBean)bf.getBean("messagebean");
msgBean.show();
}
}

 

csdn的编辑器真不好用,jar包未提供,很简单的例子。

 

 

分享到:
评论

相关推荐

    Spring的IoC容器(《Spring揭秘》的精选版)

    迷你书是《Spring揭秘》的精选版,节选了原书中介绍Spring IoC容器的6个章节。《Spring揭秘》以幽默生动的语言、辅以有趣...Spring IoC容器之扩展篇 6.1 Spring 2.5的基于注解的依赖注入 6.2 Spring 3.0展望 6.3 小结

    spring基础进阶技巧200篇.zip

    Spring Boot:介绍了Spring Boot框架的使用和配置,包括自动配置、起步依赖等。 数据访问:介绍了Spring框架对数据库访问的支持,包括JDBC、ORM框架、事务管理等。 测试和调试:介绍了如何使用Spring进行单元测试和...

    SSM框架的学习与应用-Java EE企业级应用开发学习记录-(第六天)初识Spring框架

    本资源是一篇关于学习和应用SSM框架(Spring、SpringMVC、MyBatis)的学习记录系列文章中的第六天...通过学习这篇文章,你将会对Spring框架有一个初步的了解,并能够使用Spring的IoC容器实现控制反转和简单工厂模式。

    JAVA spring 系列案例50个和学习资料

    Spring系列第12篇:lazy-init:bean延迟初始化Spring系列第13篇:使用继承简化bean配置(abstract & parent)Spring系列第14篇:lookup-method和replaced-method比较陌生,怎么玩的?Spring系列第15篇:代理详解(Java...

    spring杂谈 作者zhang KaiTao

    1.18 不重复配置——利用Spring通用化配置 1.19 @Value注入Properties 错误的使用案例 1.20 @Value注入Properties 使用错误的案例 1.21 扩展SpringMVC以支持更精准的数据绑定 1.22 扩展SpringMVC以支持更精准的数据...

    Spring.3.x企业应用开发实战(完整版).part2

    1.5.3 可通过Java类提供IoC配置信息 1.5.4 通用类型转换系统和属性格式化系统 1.5.5 数据访问层新增OXM功能 1.5.6 Web层的增强 1.5.7 其他 1.6 Spring对Java版本的要求 1.7 如何获取Spring 1.8 小结 第2章 快速入门 ...

    《精通Spring2.X企业应用开发详解》随书源码1-15章

    展现层应用 第19章 Spring MVC之一 第20章 Spring MVC之二 第21章 集成其他Web框架 第6篇 其他 第22章 Spring应用的测试 第23章 Spring工具类盘点 附录A 各种数据库连接配置及驱动 附录B ...

    《精通Spring2.X企业应用开发详解》16-19章

    展现层应用 第19章 Spring MVC之一 第20章 Spring MVC之二 第21章 集成其他Web框架 第6篇 其他 第22章 Spring应用的测试 第23章 Spring工具类盘点 附录A 各种数据库连接配置及驱动 附录B ...

    《精通Spring2.X企业应用开发详解》20-23

    展现层应用 第19章 Spring MVC之一 第20章 Spring MVC之二 第21章 集成其他Web框架 第6篇 其他 第22章 Spring应用的测试 第23章 Spring工具类盘点 附录A 各种数据库连接配置及驱动 附录B ...

    Spring3.x企业应用开发实战(完整版) part1

    1.5.3 可通过Java类提供IoC配置信息 1.5.4 通用类型转换系统和属性格式化系统 1.5.5 数据访问层新增OXM功能 1.5.6 Web层的增强 1.5.7 其他 1.6 Spring对Java版本的要求 1.7 如何获取Spring 1.8 小结 第2章 快速入门 ...

    Spring应用篇.xmind

    主要梳理了Spring的基础和高级应用的知识,包括整个Spring的体系结构介绍、IOC,DI配置使用,包括纯XML,注解和XML混合,纯注解三种配置方式,还有Spring的AOP,整个Junnit,事务等知识点的梳理。

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    2.3.2 使用MVC模式的不足之处 2.4 目前市场上常见的轻量级J2EE开发容器 2.5 小结 第二篇 建立和使用J2EE的开发平台 第三章 建立Java的开发平台 3.1 建立Java的开发环境 3.1.1 下载JDK 3.1.2 安装JDK 3.1.3 设定Path...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    2.3.2 使用MVC模式的不足之处 2.4 目前市场上常见的轻量级J2EE开发容器 2.5 小结 第二篇 建立和使用J2EE的开发平台 第三章 建立Java的开发平台 3.1 建立Java的开发环境 3.1.1 下载JDK 3.1.2 安装JDK 3.1.3 设定Path...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    2.3.2 使用MVC模式的不足之处 2.4 目前市场上常见的轻量级J2EE开发容器 2.5 小结 第二篇 建立和使用J2EE的开发平台 第三章 建立Java的开发平台 3.1 建立Java的开发环境 3.1.1 下载JDK 3.1.2 安装JDK 3.1.3 设定Path...

    如果你读完这篇文章,恭喜你!你的Spring入门了!

    第一篇:Spring框架的概述以及Spring中基于XML的IOC配置 1.spring的概述 spring是什么 Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的...

    springmybatis

    mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in ...

    超详细的Spring框架讲解,就这一篇!足矣

    Spring框架概述1、什么是Spring2、Spring框架的优点3、Spring框架体系结构Spring框架——控制反转(IOC)1、IOC介绍2、基于配置的IOC2.1、导入jar包2.2、配置文件2.3、测试3、基于注解的IOC3.0、导包3.1、开启注解...

    Android代码-java-bible

    IOC容器实现篇 设计模式系列 Java8系列 Hexo搭建博客 开发者指南 运维相关 经典文章 开源组件实现 MVC框架实现篇 项目规划 路由设计 控制器设计 配置设计 视图设计 数据库操作 增删改查 IOC容器实现篇 IOC的...

    Java EE轻量级解决方案S2SH

    在Spring部分主要讲解IoC的原理,Spring对Bean的管理机制,Spring AOP编程,以及声明事务的配置和管理。 本书重点突出、偏重应用,结合理论篇的实例和实践篇对贯穿案例进行讲解、剖析及实现。实践篇贯穿案例在线考试...

Global site tag (gtag.js) - Google Analytics