spring Xml方式实现DI
admin
2024-05-16 13:49:36
0

spring中的Bean的管理:
Bean(汉译咖啡豆). 又称JAVABean.其实就是JAVA程序程序中的一个个对象,所以Bean的管理其实就是spring对于JAVA程序中的对象的管理
管理的内容是什么

1 .对象的创建 IOC

IOC 叫做控制反转,就是Spring给我们创建对象,然后我们直接用,不用自己NEW,前面已经解释过
IOC处理的是对象如何创建的问题

2. 属性的赋值 DI

DI Dependency Injection,即“依赖注入” 就是创建属性时给对象属性赋值
对象功能的实现往往要依赖属性的值,那么给对象属性赋值就可以说成是依赖注入
由于对象属性不仅仅是基本数据类型,还可能是其他类,或者引用类型
那么依赖注入将会把更多的对象之间的关系整理到一起,可以行程一个庞大的依赖关系
DI处理的是对象的属性赋值和互相依赖的关系

spring给我们提供了两种关于bean的方式

1.基于XML方式的Bean管理
2.基于注解方式的Bean管理

创建新的模块并导入以下依赖

依赖

   org.springframeworkspring-context5.3.5junitjunit4.13.1test

创建spring配置文件,一般spring的配置文件很多人约定俗称为application*.xml***

准备一个要实例化的类

public class User {private Integer userid;private String username;private String password;@Overridepublic String toString() {return "User{" +"userid=" + userid +", username='" + username + '\'' +", password='" + password + '\'' +'}';}public User() {System.out.println("noArgConstructor");}public User(Integer userid, String username, String password) {System.out.println("allArgConstructor");this.userid = userid;this.username = username;this.password = password;}public void setUserid(Integer userid) {System.out.println("setUserid");this.userid = userid;}public void setUsername(String username) {System.out.println("setUsername");this.username = username;}public void setPassword(String password) {System.out.println("setpassword");this.password = password;}
}

IOC创建对象
通过无参构造方法构造对象


 标签的常见属性

id 对象的id
class 类的全路径名
name 和id类似,一般不用
scope 控制对象单例多例和使用范围
singleton作用域(scope 默认值), Spring IOC容器中只会存在一个共享的bean实例
prototype作用域部署的bean,每一次获取都会产生一个新的bean实例,相当与一个new的操作
request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义
lazy-init 懒加载 调用getBean的时候再去实例化对象


DI给对象属性赋值


1 通过set方法给对象属性赋值

 

2 通过有参构造给对象属性赋值


3 通过p名称空间和c名称空间给对象属性赋值 添加约束



配置对象

测试代码

public class Test1 {@Testpublic void testGetBean(){ApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml");User user1 = context.getBean("user1", User.class);User user2 = context.getBean("user2", User.class);User user3 = context.getBean("user3", User.class);User user4 = context.getBean("user4", User.class);User user5 = context.getBean("user5", User.class);System.out.println(user1);System.out.println(user2);System.out.println(user3);System.out.println(user4);System.out.println(user5);}
}

4 注入空值和特殊符号

 ]]>

5 关于bean引用

实体类

package com.msb.bean;
import java.util.Date;
/*** @Author: Ma HaiYang* @Description: MircoMessage:Mark_7001*/
public class Mouse {private String name;private Date birthdate;@Overridepublic String toString() {return "Mouse{" +"name='" + name + '\'' +", birthdate=" + birthdate +'}';}public Mouse() {}public Mouse(String name, Date birthdate) {this.name = name;this.birthdate = birthdate;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getBirthdate() {return birthdate;}public void setBirthdate(Date birthdate) {this.birthdate = birthdate;}
}
package com.msb.bean;
/*** @Author: Ma HaiYang* @Description: MircoMessage:Mark_7001*/
public class Cat {private String name;private Mouse mouse1;@Overridepublic String toString() {return "Cat{" +"name='" + name + '\'' +", mouse1=" + mouse1 +'}';}public Cat() {}public Cat(String name, Mouse mouse1) {this.name = name;this.mouse1 = mouse1;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Mouse getMouse1() {return mouse1;}public void setMouse1(Mouse mouse1) {this.mouse1 = mouse1;}
}

xml 配置

  

6 关于集合注入

实体类

package com.msb.bean;
/*** @Author: Ma HaiYang* @Description: MircoMessage:Mark_7001*/
public class Book {private String bname;private String author;@Overridepublic String toString() {return "Book{" +"bname='" + bname + '\'' +", author='" + author + '\'' +'}';}public Book() {}public Book(String bname, String author) {this.bname = bname;this.author = author;}public String getBname() {return bname;}public void setBname(String bname) {this.bname = bname;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}
}
package com.msb.bean;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
/*** @Author: Ma HaiYang* @Description: MircoMessage:Mark_7001*/
public class Student {private String[] books;private Set bookSet;private List bookList;private Map bookMap;private List bookList2;@Overridepublic String toString() {return "Student{" +"books=" + Arrays.toString(books) +", bookSet=" + bookSet +", bookList=" + bookList +", bookMap=" + bookMap +", bookList2=" + bookList2 +'}';}public String[] getBooks() {return books;}public void setBooks(String[] books) {this.books = books;}public Set getBookSet() {return bookSet;}public void setBookSet(Set bookSet) {this.bookSet = bookSet;}public List getBookList() {return bookList;}public void setBookList(List bookList) {this.bookList = bookList;}public Map getBookMap() {return bookMap;}public void setBookMap(Map bookMap) {this.bookMap = bookMap;}public List getBookList2() {return bookList2;}public void setBookList2(List bookList2) {this.bookList2 = bookList2;}public Student() {}public Student(String[] books, Set bookSet, List bookList, Map bookMap, List bookList2) {this.books = books;this.bookSet = bookSet;this.bookList = bookList;this.bookMap = bookMap;this.bookList2 = bookList2;}
}

配置文件


JAVAMySQLSpringJAVAMySQLSpringJAVAMySQLSpring

7 工厂方式获取bean

特点 : bean标签中定义的class类不是返回的对象的类,而是生产该对象的工厂
工厂模式:GOF 设计模式
spring中给我们定义好了一个工厂接口,可以生产对象的接口,我们可以通过工厂来获取bean

定义工厂对象 实现 FactoryBean接口

 package com.msb.bean;
import org.springframework.beans.factory.FactoryBean;
/*** @Author: Ma HaiYang* @Description: MircoMessage:Mark_7001*/
public class BookFactory implements FactoryBean {@Overridepublic Book getObject() throws Exception {Book book=new Book();book.setBname("JAVA");book.setAuthor("马士兵");return book;}@Overridepublic Class getObjectType() {return null;}
}

配置文件

 

测试代码

@Testpublic void testGetBean(){ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext5.xml");Book book = applicationContext.getBean("book", Book.class);System.out.println(book);}

上一篇:Linux用户管理

下一篇:常见DEM数据汇总

相关内容

热门资讯

斗金订购APP贵金属期货投资被...   斗金订购APP的投资者被广告宣传给诱导,注册就送什么现金,然后充值返现金卷等等这些宣传方式,都是...
哈易购APP非法期货交易欺骗投...   哈易购APP宣传可做白银铂金贵金属订购交易,但实际上并没有取得相关交易资质!哈易购APP本质上就...
消息称百度旗下昆仑芯瞄准500... 6 月 29 日消息,据《The Information》昨日援引知情人士消息,百度旗下 AI 芯片...
打造夏日消费新场景 第35届北... 北京商报讯(记者 翟枫瑞)6月29日消息,第35届北京国际燕京啤酒文化节新闻发布会在京举行。本届啤酒...
社保基金持仓数据出炉,一季度增... 最近各大上市公司一季度财报都公开了,咱们国家社保基金的持仓数据也全部曝光。目前社保拿着比亚迪价值44...
36氪首发 | 海思、中兴团队... 作者 | 乔钰杰 编辑 | 袁斯来 硬氪获悉,广州宸思通讯科技有限公司(以下简称“宸思科技”)近日完...
两天蒸发47亿市值!一纸税务通... 一纸税务通知书,能让一家百亿龙头两天蒸发47亿市值。 6月22日,北大荒(600598.SH)公告称...
SK海力士将投资1100万亿韩... SK集团会长崔泰源6月29日在韩国“三大重大计划”发布会上宣布,公司将投资1100万亿韩元扩大半导体...
两只A股,终止上市! 两家A股公司,即将摘牌。 6月29日,退市沪科(600608.SH)公告称,上海证券交易所将在202...
原创 M... 一家成立近十年的自动驾驶公司,在IPO时吸引了14家基石投资者认购近一半的发行股份,其中不乏奔驰、比...
基金忠言|国寿安保滤镜碎,三年... 图片来源:视觉中国 蓝鲸新闻6月29日讯(记者 祁和忠)保险系基金公司国寿安保总经理换人了。 6月2...
三星电机计划加码玻璃基板!相关... 6月29日,玻璃基板概念股午后有所回升, 华工科技(000988.SZ)逼近涨停, 彩虹股份(600...
拉萨海关持续壮大外贸经营主体 ...   新华网拉萨6月28日电(记者蒋梦辰)近日,记者从拉萨海关获悉,今年前5个月,西藏有进出口实绩的外...
机构:二季报临近,医药生物板块... 6月29日,华源证券发布了一篇医药生物行业的研究报告,报告指出,业绩期临近,产业链景气度有望再次迎来...
每日收评科创50放量涨超4.5... 财联社6月29日讯,三大指数全线收红,创业板指探底回升,科创50指数大涨4.61%。沪深两市成交额3...
6月多地土拍结构性升温:深圳单... 进入2026年6月,不少城市核心区地块集中诞生高溢价宗地,热度突出的城市包含深圳、杭州、长沙。 其中...
业绩炸裂!盛达资源半年预盈3.... 6月29日,贵金属矿山龙头盛达资源(000603.SZ)发布 2026 年半年度业绩预告,上半年业绩...
A股午后拉升三大股指收涨:半导... A股三大股指6月29日开盘涨跌互现。早盘沪强深弱,创指一度跌超2%。半导体午后拉升,带动两市上涨,沪...
原创 空... 前言 大家好,我是老金。 这几天,两幅极度割裂的画面放在一起,把我看笑了。 一边是在持续的热浪下,欧...