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期货投资骗局,平...   “小赢淘金”之流,最擅长的就是用“注册送现金”、“充值返券”的糖衣炮弹来引流。别天真地以为那是福...
八方淘金APP非法期货交易欺骗...   警惕!八方生财、每日淘金、小赢淘金、悟空订购、蜻蜓订购、斗金订购等APP均涉嫌非法期货交易!  ...
智易购APP贵金属订购交易骗局...   很多人看到“3元起投”“充值送福利”“操作简单”“随时提现”这类宣传,很容易把智易购APP当成普...
喜玛银庄APP商品订购投资骗局...   喜玛银庄APP白银、铂金“现货订购”骗局警示:无资质平台涉嫌非法期货交易,投资者爆仓后如何维权?...
吉鑫乐享APP炒贵金属订购交易...   近期,多名投资者反映在“吉鑫乐享APP”进行贵金属投资时遭遇严重亏损,甚至血本无归。看似正规的“...
易掘金APP虚假期货投资骗局,...   “易掘金”的APP它打着“高收益、灵活投资”的旗号,宣称通过“商品订购”就能轻松赚钱,吸引了不少...
在大吉订购APP订购交易亏损被...   近期,不少投资者反映在“大吉订购App”上投资白银、铂金等商品遭遇严重亏损。该平台宣称提供现货订...
铂银壹号APP商品订购交易亏损...   许多中小投资者误以为网上的“商品现货订购”是合规合法的理财渠道,殊不知这背后隐藏着巨大的合规风险...
兴鑫淘金APP贵金属订购交易亏...   白银、贵金属或其他商品类投资,除国家批准的正规期货交易场所及持牌期货公司外,市面上大量第三方交易...
铂银掘金APP无资质的违规平台...   铂银掘金等平台的投资者,往往是被“注册送现金”“充值返现券”“首单免亏”等广告话术吸引,进而下载...
八方淘金APP订购交易不合规,...   “八方淘金APP”“铂银掘金APP”“铂银壹号APP”等软件被指以“现货订购”为名,实际采用高杠...
在指尖订购APP订购商品亏损被...   指尖订购APP这类平台,表面是“订购交易”,实则是披着电商外衣的非法期货陷阱。绝大多数投资者被蒙...
在犀贝易购APP做商品订购交易...   市面上打着“现货投资”“贵金属交易”旗号的APP并不少,但真正合规、受监管的平台并不多。犀贝易购...
易达淘金APP虚假商品订购交易...   易达淘金APP存在严重的虚假宣传与违规交易行为。该平台打着“商品订购”的旗号,实则通过不合规的交...
大浪淘金APP白银订购亏损被骗...   大浪淘金APP最隐蔽的套路,在于其完全封闭的内盘交易系统。表面上,它宣称与国际贵金属市场接轨;实...
一品好购APP上订购白银出现亏...   一品好购APP原名“一品订购”,运营方为上海宝智未来信息技术有限公司。近期不少投资者反映在该平台...
九州订购APP贵金属订购投资骗...   九州订购APP正通过抖.音、快手、今日头条等平台大量投放投资广告,用“5元起投”“充值返现”“0...
坚锅淘金APP交易软件并不正规...   当前,市面上大量所谓的“现货商城订购”交易软件,早已偏离了正常的实物商品买卖,演变为高杠杆、高手...