• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > 详解Spring框架---IOC装配Bean

详解Spring框架---IOC装配Bean

作者:雨点的名字 字体:[增加 减小] 来源:互联网 时间:2017-05-28

雨点的名字 通过本文主要向大家介绍了spring ioc详解,spring的ioc,spring中ioc和aop,spring ioc原理,spring ioc aop的原理等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

IOC装配Bean

(1)Spring框架Bean实例化的方式提供了三种方式实例化Bean

  1. 构造方法实例化(默认无参数,用的最多)
  2. 静态工厂实例化
  3. 实例工厂实例化

下面先写这三种方法的applicationContext.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:p="http://www.springframework.org/schema/p"
  xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
  <!-- Bean的三种实例化方式=================== -->  
   <!-- 2.1 使用无参的构造器 -->
   <bean id="bean1" class="com.study.spring.b_instance.Bean1"></bean>
   <!-- 2.2使用静态工厂方法 factory-method 是工厂提供的静态方法 -->
   <bean id="bean2" class="com.study.spring.b_instance.Bean2" factory-method="createInstance"></bean>
   <!-- 2.3配置实例化工厂的方法 -->
   <bean id="bean3Factory" class="com.study.spring.b_instance.Bean3Factory"></bean>
   <bean id="bean3" factory-bean="bean3Factory" factory-method="getInstance"></bean>
  <!-- end.Bean的三种实例化方式==================== -->
</div>

Bean1类

public class Bean1 {
  
  //必须提供无参的构造函数 系统有默认无参的构造函数
}
</div>

Bean2类

public class Bean2 {
  private static Bean2 Bean2 = new Bean2();

  private Bean2() {
  }

  public static Bean2 createInstance() {
    return Bean2;
  }
}
</div>

Bean3类

public class Bean3 {

}

</div>

Bean3Factory类

public class Bean3Factory {
  
  private Bean3Factory(){
    
  }
   
  public Bean3 getInstance(){
    return new Bean3();
  }
}
</div>

测试类InstanceDemo

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class InstanceDemo {
  
  //实例化工厂方法
  @Test
  public void demo3(){
    //加载配置文件 创建工厂
    ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
    
    Bean3 bean3 =(Bean3) applicationContext.getBean("bean3");
    System.out.println(bean3);
    
  }
  
  //静态工厂方法
  @Test
  public void demo2(){
    //加载配置文件 创建工厂
    ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
    
    Bean2 bean2 =(Bean2) applicationContext.getBean("bean2");
    System.out.println(bean2);
    
  }
  //构造方法得到bean对象
  @Test
  public void demo1(){
    //加载配置文件 创建工厂
    ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
    
    Bean1 bean1 =(Bean1) applicationContext.getBean("bean1");
    System.out.println(bean1);
    
  }
}
/*
 * 这三个都得到类似于com.study.spring.b_instance.Bean1@7229c204 的内存地址
 */

</div>

 (2).Bean的其他配置:

一般情况下,装配一个Bean时,通过指定一个id属性作为Bean的名称

id 属性在IoC容器中必须是唯一的

id 的命名要满足XML对ID属性命名规范 必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号

如果Bean的名称中含有特殊字符,就需要使用name属性 例如: <bean name="#person" class="cn.itcast.bean.Person"/>

因为name属性可以相同,所以后出现Bean会覆盖之前出现的同名的Bean

id和name的区别:

id遵守XML约束的id的约束.id约束保证这个属性的值是唯一的,而且必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号

name没有这些要求

如果bean标签上没有配置id,那么name可以作为id.

Bean的scope属性

 <!-- 3.Bean的scope属性==================== -->  
   <bean id="product" class="com.study.spring.c_scope.Product" scope="singleton"></bean>
 <!-- end.Bean的scope属性=========== -->  
</div>

 * singleton :单例的.(默认的值.)

 * prototype :多例的.

* request :web开发中.创建了一个对象,将这个对象存入request范围,request.setAttribute();

* session :web开发中.创建了一个对象,将这个对象存入session范围,session.setAttribute();

* globalSession :一般用于Porlet应用环境.指的是分布式开发.不是porlet环境,globalSession等同于session;

3.Bean属性的依赖注入

前面已经知道如何获得对象,那我们接下来要知道如果给对象对象的属性赋值。

 

下面通过举例说明: 

Car 类

public class Car {

  private String name;

  private double price;

  public Car(String name, double price) {
    super();
    this.name = name;
    this.price = price;
  }

  @Override
  public String toString() {
    return "Car [name=" + name + ", price=" + price + "]";
  }
}

</div>

Car2类

public class Car2 {
  private String name;

  private double price;

  public void setName(String name) {
    this.name = name;
  }

  public void setPrice(double price) {
    this.price = price;
  }

  @Override
  public String toString() {
    return "Car2 [name=" + name + ", price=" + price + "]";
  }

}

</div>

CarInfo类

public class CarInfo {
  
  public String getName(){
    return "哈弗H6";
  }
  
  public double caculatePrice(){
    return 110000;
  }
}

</div>

CollectionBean类

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

public class CollectionBean {
  private String name;

  private Integer age;

  private List<String> hobbies;

  private Set<Integer> numbers;

  private Map<String, String> map;

  private Properties properties;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public Integer getAge() {
    return age;
  }

  public void setAge(Integer age) {
    this.age = age;
  }

  public List<String> getHobbies() {
    return hobbies;
  }

  public void setHobbies(List<String> hobbies) {
    this.hobbies = hobbies;
  }

  public Set<Integer> getNumbers() {
    return numbers;
  }

  public void setNumbers(Set<Integer> numbers) {
    this.numbers = numbers;
  }

  public Map<String, String> getMap() {
    return map;
  }

  public void setMap(Map<String, String> map) {
    this.map = map;
  }

  public Properties getProperties() {
    return properties;
  }

  public void setProperties(Properties properties) {
    this.properties = properties;
  }

  @Override
  public 



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Spring之IOC详解
  • 详解Spring框架---IOC装配Bean
  • 用java的spring实现一个简单的IOC容器示例代码

相关文章

  • 2017-05-28详谈Java编程之委托代理回调、内部类以及匿名内部类回调(闭包回调)
  • 2017-05-28spring boot装载自定义yml文件
  • 2017-05-28java向文件中追加内容与读写文件内容源码实例代码
  • 2017-05-28Java栈之链式栈存储结构的实现代码
  • 2017-05-28Spring boot实现热部署的两种方式详解
  • 2017-05-28Java中IO流 RandomAccessFile类实例详解
  • 2017-05-28java中Serializable接口作用详解
  • 2017-05-28Java集合之HashMap用法详解
  • 2017-05-28Mybatis开发环境搭建实现数据的增删改查功能
  • 2017-05-28Spring batch批处理框架

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Java使用File类遍历目录及文件实例代码
    • Spring中配置和读取多个Properties文件的方式方法
    • SpringMVC解析JSON请求数据问题解析
    • Kotlin教程之函数和包的定义和流程控制
    • Spring Boot 快速入门指南
    • java中 Set与Map排序输出到Writer详解及实例
    • Spring中属性注入的几种方式以及复杂属性的注入详解
    • 详解Java5、Java6、Java7的新特性
    • Java微信公众平台开发(14) 微信web开发者工具使用
    • Java中的SimpleDateFormat使用详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有