spring IOC控制反转及IOC实现的三种方式和bean标签使用

您所在的位置:网站首页 spring中实现控制反转的关键组件是 spring IOC控制反转及IOC实现的三种方式和bean标签使用

spring IOC控制反转及IOC实现的三种方式和bean标签使用

2024-07-12 17:10:31| 来源: 网络整理| 查看: 265

spring  IOC控制反转及IOC实现的三种方式和bean标签使用

   IOC: 控制反转,简单的说是指对象的创建不再使用new,而是由spring框架创建。当服务器开始运行时,读取spring的主配置文件,经过spring框架从主配置文件中识别所有的bean标签,然后根据配置,将所有的对象创建出来。创建出来的对象保存在内存空间。         IOC操作可以有三种实现方式:       1、使用默认构造方法创建对象       2、静态工厂创建对象(关键在静态方法)          自定义一个静态的工厂,通过工厂获取对象。       3、实例工厂创建对象

下面演示的是IOC获取对象的三种方式:

项目中SpringTest.java测试类使用junit方式测试即单元测试。lib目录下为测试中需要的spring jar包,log4j.jar为日志包,User.java是测试需要的一个实体类,applicationContext.xml为spring的主配置文件,名称可以任意但官方建议使用该默认名称。MyFactory.java 为演示实例工厂方法创建对象的工厂类,StaticFcatory.java 为演示静态工厂方法创建对象的工厂类。log4j.properties为日志配置文件。本案例使用的spring版本为 spring4.3.9。

创建一个java项目,项目结构如下,:

代码如下:

1、applicationContext.xml (主配置文件)

2、log4j.properties (日志文件)

log4j.rootLogger=DEBUG,console,FILE log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.threshold=INFO log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] - %c -%F(%L) -%m%n log4j.appender.FILE=org.apache.log4j.RollingFileAppender log4j.appender.FILE.maxBackupIndex=100 ##log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender log4j.appender.FILE.Append=true log4j.appender.FILE.File=c:/error1.log log4j.appender.FILE.Threshold=INFO log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] - %c -%F(%L) -%m%n log4j.appender.FILE.MaxFileSize=1MB

3、SpringTest.java (junit测试类)

package cn.sz.test; import java.util.Calendar; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.sz.pojo.User; //测试ioc创建对象 public class SpringTest { @Test public void test1() { // 读取主配置文件 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); // 获取对象 String str = context.getBean("str", String.class); System.out.println(str.hashCode());// 打印hash值 } // 方式一:使用默认构造方法创建对象 @Test public void test2() { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); User user1 = context.getBean("user1", User.class); System.out.println(user1.hashCode());// 打印hash值 } @Test public void test3() { // 通过静态方法获取日历对象 Calendar c1 = Calendar.getInstance(); System.out.println(c1);// 打印内存地址 System.out.println("---------------"); ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); Calendar c2 = ac.getBean("c", Calendar.class); System.out.println(c2);// 打印内存地址 } // 方式二:静态工厂方法创建对象 @Test public void test4() { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); User user2 = ac.getBean("user2", User.class); System.out.println(user2);// 打印内存地址 } // 方式三:实例工厂方法创建对象 @Test public void test5() { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); User user3 = ac.getBean("user3", User.class); System.out.println(user3);// 打印内存地址 } }

4、User.java (用户实体类)

package cn.sz.pojo; public class User { private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }

5、MyFactory.java (实例工厂方法类)

package cn.sz.factory; import cn.sz.pojo.User; public class MyFactory { // 实例工厂方法获取User对象 public User getUser() { return new User(); } }

6、StaticFactory.java (静态工厂方法类)

package cn.sz.factory; import cn.sz.pojo.User; public class StaticFactory { // 静态方法获取User对象 public static User getUser() { return new User(); } }

补充内容:

配置文件中的id名称必须唯一,实体类User必须提供无参的构造方法

getBean方法获取对象的第一个参数为在配置文件中对象你要创建的对象的id,第二个参数为该对象的类型对象

User user1 = context.getBean("user1", User.class);

bean标签比较常见的属性: name: 针对struts中的引用名存在特殊符号的情况时id不能使用则可以使用name,但是现在已经不用. id:   用于设置对象的引用名称 class: 用于设置类全名路径 scope : singleton(单例),prototype(多例),request,session singleton设置对象是单例的         prototype设置对象是多例的---在ssh架构针对action类对象常用设置         request设置对象在request范围对象的管理之中         session设置对象在session域对象管理之中



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭